【最大流-ISAP】POJ-1273-网络流模板!!

来源:互联网 发布:滨州行知中学招生电话 编辑:程序博客网 时间:2024/06/05 13:52

POJ-1273:http://poj.org/problem?id=1273

网络最大流裸体

直接套ISAP模板,亲测好用

网络流太难,姑且直接贴模板吧


效率:0MS!


#include<cstdio>#include<cstring>#include<iostream>using namespace std;const int maxn = 210;const int maxm = 500;const int INF = 0x7FFFFFF;#define mem(name,value) memset((name),(value),sizeof(name))struct Side{int to,next,c;}side[maxm];int top,node[maxn];void add_side(int u,int v,int c,int rc){side[top]=(Side){v,node[u],c};node[u]=top++;side[top]=(Side){u,node[v],rc};node[v]=top++;}int start,end,cnt,dis[maxn],gap[maxn];int get_flow(int u,int flow){//printf("%d %d\n",u,flow);if(u==end)return flow;int ans=0;for(int i=node[u];i!=-1;i=side[i].next){int v=side[i].to,c=side[i].c;if(dis[u]>dis[v]&&c){int f=get_flow(v,min(flow-ans,c));ans+=f;side[i].c-=f;side[i^1].c+=f;if(ans==flow)return ans;}}if(!(--gap[dis[u]]))dis[start]=cnt+2;gap[++dis[u]]++;return ans;}int main(){    //freopen("input.txt","r",stdin);int n,m;while(~scanf("%d%d",&m,&n)){top=0;mem(node,-1);mem(gap,0);mem(dis,0);while(m--){int u,v,w;scanf("%d%d%d",&u,&v,&w);add_side(u,v,w,0);}int ans=0;start=1;end=n;cnt=n;gap[0]=cnt;while(dis[start]<cnt)ans+=get_flow(start,INF);printf("%d\n",ans);}return 0;}


0 0
原创粉丝点击