码迷,mamicode.com
首页 > 其他好文 > 详细

模板合集

时间:2016-08-14 20:33:46      阅读:150      评论:0      收藏:0      [点我收藏+]

标签:

神奇的模板...总之各种各样的模板整理...已经准备用我现在的码风重新打一遍了...

 

图论

  • 网络流-ISAP(VE2)
技术分享
 1 #include<cstdio>
 2 #include<cstring>
 3 #include<vector>
 4 #include<queue>
 5 #include<iostream>
 6 using namespace std;
 7 
 8 const int INF = 0x7fffffff;
 9 const int N = 505;
10 const int M = 805;
11 
12 inline int in(int x=0,char ch=getchar()){ while(ch>9||ch<0) ch=getchar();
13     while(ch>=0&&ch<=9) x=(x<<3)+(x<<1)+ch-0,ch=getchar();return x; }
14 struct NetWork{
15     int n,m,s,t;
16     struct Edge{ int fr,to,flow; }edge[M<<1];int cnte;
17     vector<int> g[N];int flow;
18     int num[N],cur[N],d[N],p[N];bool v[N];
19 
20 
21     void Add_Edge(int fr,int to,int fl){
22         edge[cnte++]=(Edge){ fr,to,fl },edge[cnte++]=(Edge){ to,fr,0 };
23         g[fr].push_back(cnte-2),g[to].push_back(cnte-1);
24     }
25     int Add_Flow(){
26         int a=INF;
27         for(int x=t;x!=s;x=edge[p[x]].fr) a=min(a,edge[p[x]].flow);
28         for(int x=t;x!=s;x=edge[p[x]].fr) edge[p[x]].flow-=a,edge[p[x]^1].flow+=a;
29         return a;
30     }
31     void BFS(){
32         for(int i=1;i<=n;i++) d[i]=n;
33         memset(v,0,sizeof(v));
34         queue<int> q;q.push(t),v[t]=1,d[t]=0;
35         for(int x;!q.empty();){
36             x=q.front(),q.pop();
37             for(int i=0,lim=g[x].size();i<lim;i++){
38                 Edge &e=edge[g[x][i]];
39                 Edge &u=edge[g[x][i]^1];
40                 if(!v[e.to]&&u.flow) d[e.to]=d[x]+1,v[e.to]=1,q.push(e.to);
41             }
42         }
43     }
44     int ISAP(){
45         BFS();int flow=0;
46         memset(num,0,sizeof(num)),memset(cur,0,sizeof(cur));
47         for(int i=1;i<=n;i++) num[d[i]]++;
48         for(int x=s,ok;d[s]<n;){
49             if(x==t) flow+=Add_Flow(),x=s;ok=0;
50             for(int &i=cur[x],lim=g[x].size();i<lim;i++){
51                 Edge &e=edge[g[x][i]];
52                 if(e.flow&&d[x]==d[e.to]+1){
53                     ok=1,p[e.to]=g[x][i],x=e.to;break;
54                 }
55             }
56             if(!ok){
57                 int tmp=n-1;
58                 for(int i=0,lim=g[x].size();i<lim;i++) tmp=min(tmp,d[edge[g[x][i]].to]);
59                 if(!(--num[d[x]])) break;num[d[x]=m+1]++,cur[x]=0;
60                 if(x!=s) x=edge[p[x]].fr;
61             }
62         }return flow;
63     }
64 }isap;
65 int main(){ return 0; }
ISAP
  • 网络流-Dinic(V2E)/二分图(sqrt(V)E)

 

模板合集

标签:

原文地址:http://www.cnblogs.com/beiyuoi/p/5770820.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!