poj1459-Dinic演算法

來源:互聯網
上載者:User

題目串連

題目廢話真多!

題目的意思是: 有n個發電站,np個消費點,nc個轉網站,m條線纜。問你輸出的最大電量。

輸入說明:

 前面四個分別表示:發電站的個數,消費點的個數,轉網站個數,和線纜數。接下來前m是線纜串連的點數(1,0)代表線纜的兩個連接點,再就是n個消費的位置(i)和需求。

最後就是轉網站的位置(i)和最大流通量。

分析:

此題是一個模板題,用dinic演算法就可以A了。把發電站看成源點,消費點看成匯點。再就是建圖了。看下面這張圖就理解了:

#include<cstdio>#include<cstring>#include<queue>#include<algorithm>#define INF 0x3ffusing namespace std;const int N=250;int level[N],head[N];int n,t,s,cnt;struct node{int p,f,next;}edge[N*N];void add(int u,int v,int w){edge[cnt].p=v;edge[cnt].f=w;edge[cnt].next=head[u];head[u]=cnt++;edge[cnt].p=u;   //反向邊。 edge[cnt].f=0;edge[cnt].next=head[v];head[v]=cnt++;}int bfs(){int front=0,rear=0,cur,cl;int que[N];memset(level,-1,sizeof(level));que[rear++]=s;level[s]=0;    for(;front!=rear;front=(front+1)%N){    //迴圈列表。 cur=que[front];cl=level[cur];for(int i=head[cur];i!=-1;i=edge[i].next){if(edge[i].f&&level[edge[i].p]==-1){que[rear]=edge[i].p;level[edge[i].p]=cl+1;rear=(rear+1)%N;}}}    return level[t]!=-1;}int dfs(int r,int h){int tmp=0,cp;if(r==t) return h;for(int i=head[r];tmp<h&&i!=-1;i=edge[i].next){if(edge[i].f&&level[r]+1==level[edge[i].p]){  cp=min(h-tmp,edge[i].f);  cp=dfs(edge[i].p,cp);   edge[i].f-=cp;  edge[i^1].f+=cp;   //異或運算,相當於i(偶數),與i+1互換,奇數i與i-1互換。2^1=3,3^1=2;   tmp+=cp;}}if(!tmp) level[r]=-2;return tmp;}int dinic(){int ans,res=0;while(bfs()){while(ans=dfs(s,INF)) res+=ans;}return res;}int main(){int np,nc,m,u,v,w;char st[10];while(scanf("%d %d %d %d",&n,&np,&nc,&m)!=EOF){s=n;t=n+1;cnt=0;memset(head,-1,sizeof(head));while(m--){scanf(" (%d,%d)%d",&u,&v,&w); //注意,前面有個空格,否則輸入變為死迴圈。     add(u,v,w);}while(np--){scanf(" (%d)%d",&u,&w);add(s,u,w);}while(nc--){scanf(" (%d)%d",&u,&w);add(u,t,w);}printf("%d\n",dinic());}return 0;}

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.