poj 3469(网络流模版)
来源:互联网 发布:mac php protobuf 编辑:程序博客网 时间:2024/06/08 17:12
题目链接:http://poj.org/problem?id=3469
思路:终于把网络流的模版测试好了,在Dinic和Sap之间还是选择了Sap,事实证明Sap确实比Dinic效率高,在此贴出自己的网络流模版:
1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 #include<algorithm> 5 #include<queue> 6 using namespace std; 7 #define MAXN 44444 8 #define MAXM 999999 9 #define inf 1<<30 10 11 struct Edge { 12 int v,cap,next; 13 } edge[MAXM]; 14 15 int n,m,vs,vt,NE,NV; 16 int head[MAXN]; 17 18 void Insert(int u,int v,int cap) 19 { 20 edge[NE].v=v; 21 edge[NE].cap=cap; 22 edge[NE].next=head[u]; 23 head[u]=NE++; 24 25 edge[NE].v=u; 26 edge[NE].cap=0; 27 edge[NE].next=head[v]; 28 head[v]=NE++; 29 } 30 31 int level[MAXN]; 32 int gap[MAXN]; 33 34 void bfs(int vt) 35 { 36 memset(level,-1,sizeof(level)); 37 memset(gap,0,sizeof(gap)); 38 level[vt]=0; 39 gap[level[vt]]++; 40 queue<int>que; 41 que.push(vt); 42 while(!que.empty()) { 43 int u=que.front(); 44 que.pop(); 45 for(int i=head[u]; i!=-1; i=edge[i].next) { 46 int v=edge[i].v; 47 if(level[v]!=-1)continue; 48 level[v]=level[u]+1; 49 gap[level[v]]++; 50 que.push(v); 51 52 } 53 } 54 } 55 56 57 int pre[MAXN]; 58 int cur[MAXN]; 59 60 int SAP(int vs,int vt) 61 { 62 bfs(vt); 63 memset(pre,-1,sizeof(pre)); 64 memcpy(cur,head,sizeof(head)); 65 int u=pre[vs]=vs,flow=0,aug=inf; 66 gap[0]=NV; 67 while(level[vs]<NV) { 68 bool flag=false; 69 for(int &i=cur[u]; i!=-1; i=edge[i].next) { 70 int v=edge[i].v; 71 if(edge[i].cap&&level[u]==level[v]+1) { 72 flag=true; 73 pre[v]=u; 74 u=v; 75 // aug=(aug==-1?edge[i].cap:min(aug,edge[i].cap)); 76 aug=min(aug,edge[i].cap); 77 if(v==vt) { 78 flow+=aug; 79 for(u=pre[v]; v!=vs; v=u,u=pre[u]) { 80 edge[cur[u]].cap-=aug; 81 edge[cur[u]^1].cap+=aug; 82 } 83 // aug=-1; 84 aug=inf; 85 } 86 break; 87 } 88 } 89 if(flag)continue; 90 int minlevel=NV; 91 for(int i=head[u]; i!=-1; i=edge[i].next) { 92 int v=edge[i].v; 93 if(edge[i].cap&&level[v]<minlevel) { 94 minlevel=level[v]; 95 cur[u]=i; 96 } 97 } 98 if(--gap[level[u]]==0)break; 99 level[u]=minlevel+1;100 gap[level[u]]++;101 u=pre[u];102 }103 return flow;104 }105 106 107 int main()108 {109 int u,v,w,w1,w2;110 scanf("%d%d",&n,&m);111 vs=0;112 vt=n+1;113 NV=n+2;114 NE=0;115 memset(head,-1,sizeof(head));116 for(int i=1; i<=n; i++) {117 scanf("%d%d",&w1,&w2);118 Insert(vs,i,w1);119 Insert(i,vt,w2);120 }121 for(int i=1; i<=m; i++) {122 scanf("%d%d%d",&u,&v,&w);123 Insert(u,v,w);124 Insert(v,u,w);125 }126 printf("%d\n",SAP(vs,vt));127 return 0;128 }
0 0
- poj 3469(网络流模版)
- POJ 1273 Drainage Ditches 网络流模版
- 网络流模版(ISAP)/最大流最小割定理 poj 3469
- POJ:1273 Drainage Ditches(网络最大流模版题)
- poj 1273 Drainage Ditches(网络流模版题)
- 网络流模版
- 网络流模版
- 网络流模版
- 网络流模版
- 网络流---EK模版
- 网络流模版
- 费用流&网络流模版
- 网络流&费用流模版
- Hdu 1532 网络流模版
- 网络流各种算法模版
- 网络流(模版+例题)
- 最大费用最大流模版(POJ 3422)
- poj 2699(最大流dinic终极模版)
- 二战时泰国军队入侵中国:替日本火中取栗
- hdu 4576(概率dp+滚动数组)
- hdu 4681(枚举+dp)
- hdu 4679(树形dp)
- 矩阵小结
- poj 3469(网络流模版)
- 无法启动调试 未安装silverlight developer 运行时 解决办法
- hdu 4705(树形DP)
- hdu 4704(费马小定理)
- poj 2125(最小割)
- poj 2135(最小费用最大流)
- poj 2391(二分+最大流)
- poj 2455(二分+最大流)
- 张小龙演讲精华:产品经理的方法论与价值观