流函数三大性质:
1)容量限制:f(x,y) <= c(x,y)
2)斜对称:f(x,y)=-f(y,x)
3)流量守恒:x!=S,x!=T,Σf(u,x)=Σf(x,v)
c(x,y)=0说明该条边不在图中,同时f(x,y)<=0
EK算法 O(ve^2) 10^3--10^4 稀疏图
HDU 1532
# include <bits/stdc++.h>using namespace std;const int INF=0x7fffffff;const int MAXN=250;struct Edge{ int to,w,next;}edge[MAXN<<1]; //边要开两倍啊int head[MAXN];int tot;void add(int u,int v,int w){ edge[++tot].w+=w; //有重边所以是+ edge[tot].to=v; edge[tot].next=head[u]; head[u]=tot; return ;}void init(){ tot=1; memset(head,-1,sizeof(head)); memset(edge,0,sizeof(edge));}int N,M,S,T;int vis[MAXN];struct Pre{ int u,e;}pre[MAXN];inline int bfs(){ memset(vis,0,sizeof(vis)); memset(pre,-1,sizeof(pre)); queue<int> q; q.push(S); vis[S]=1; while(!q.empty()){ int u=q.front(); q.pop(); for(int i=head[u];~i;i=edge[i].next){ int v=edge[i].to; if(!vis[v]&&edge[i].w){ pre[v].u=u; pre[v].e=i; if(v==T) return 1; vis[v]=1; q.push(v); } } } return 0;}inline int EK(){ int ans=0; while(bfs()){ int mmin