EK(邻接阵)模板

<textarea cols="76" rows="15" name="code" class="cpp">int n,s,t; const int VMAX = 500; int r[VMAX+10][VMAX+10]; int mark[VMAX+10],pre[VMAX+10]; int EK() { int ans=0; int head,tail; while (1) { memset(mark,0,sizeof(mark)); mark[s]=1; head=tail=0; Q[tail++]=s; while (head&lt;tail) { int k=Q[head++]; for (int i=0;i&lt;=t;i++) //根据具体情况改动 if (!mark[i] &amp;&amp; r[k][i]) { pre[i]=k; mark[i]=1; if (i==t) break; Q[tail++]=i; } if (mark[t]) break; } if (!mark[t]) break; int ca=inf,p,i=t; while (i!=s) { p=pre[i]; ca=min(ca,r[p][i]); i=p; } ans+=ca; i=t; while (i!=s) { p=pre[i]; r[p][i]-=ca; r[i][p]+=ca; i=p; } } return ans; }</textarea>

你可能感兴趣的:(EK(邻接阵)模板)