2013 编程之美 初赛第二场 管道系统小数据
来源:互联网 发布:python 去除重复元素 编辑:程序博客网 时间:2024/05/20 09:05
#include<iostream>#include<cstdio>#include<cstring>#include<queue>#define MAX 205const int INF=999999999;using namespace std;int flow[MAX][MAX],cap[MAX][MAX],a[MAX],f[MAX],n;//a[i]表示流入i点的流量inline int min(int a,int b) {return a<b?a:b;}int bfs(int s,int t){ queue<int> q; memset(flow,0,sizeof(flow)); int ans=0; while(1) { memset(a,0,sizeof(a)); a[s]=INF; q.push(s); while(!q.empty()) { int u=q.front();q.pop(); for(int i=1;i<=n;i++) if(!a[i]&&flow[u][i]<cap[u][i]) { f[i]=u;q.push(i); a[i]=min(a[u],cap[u][i]-flow[u][i]); } } if(a[t]==0) break; for(int u=t;u!=s;u=f[u]) { flow[f[u]][u]+=a[t]; flow[u][f[u]]-=a[t]; } ans+=a[t]; //cout<<ans<<endl; } return ans;}int main(){ //freopen("data.txt","r",stdin); int T,count[MAX],k=1; scanf("%d",&T); while(T--) { int m,nx,ny,t; scanf("%d %d",&n,&m); memset(cap,0,sizeof(cap)); for(int i=1;i<=m;i++) { cin>>nx>>ny>>t; cap[nx][ny]+=t; cap[ny][nx]+=t; count[i]=bfs(1,n); } int max=0; printf("Case #%d:\n",k++); for(int i=1;i<=m;i++) { if(count[i]>max) { printf("%d %d\n",i,count[i]-max); max=count[i]; } } } return 0;}