最后一次训练模板(比较熟练了)
接下来训练网络流的建图
1 #include <cstdio> 2 #define INF 2147483647 3 int n,m,ans,x,y,z,M,h,t,T,tt;long long zl; 4 int d[101],l[101],fir[101],nex[2005],to[2005],wei[2005]; 5 inline int min(int a,int b){if(a<b) return a;else return b;} 6 inline void add(int x,int y,int z){to[++M]=y;wei[M]=z;nex[M]=fir[x];fir[x]=M;} 7 long long dfs(int now,long long flow,long long sum) 8 { 9 if(now==n) return flow; 10 for(int i=fir[now];i && flow;i=nex[i]) 11 if(d[to[i]]==d[now]+1 && wei[i]) 12 zl=dfs(to[i],min(flow,wei[i]),0),sum+=zl,flow-=zl,wei[i]-=zl,wei[i^1]+=zl; 13 return sum; 14 } 15 bool bfs() 16 { 17 for(int i=1;i<=n;i++) d[i]=0; 18 for(h=1,t=1,l[1]=1,d[1]=1;h<=t;h++) 19 for(int i=fir[l[h]];i;i=nex[i]) 20 if(!d[to[i]] && wei[i]) 21 l[++t]=to[i],d[l[t]]=d[l[h]]+1; 22 return d[n]; 23 } 24 int main() 25 { 26 for(scanf("%d",&T),tt=1;tt<=T;tt++) 27 { 28 scanf("%d%d",&n,&m); 29 for(int i=1;i<=n;i++) fir[i]=0; 30 for(ans=0,M=1;m;m--) 31 scanf("%d%d%d",&x,&y,&z),add(x,y,z),add(y,x,0); 32 while(bfs()) ans+=dfs(1,INF,0); 33 printf("Case %d: %d ",tt,ans); 34 } 35 return 0; 36 }