#include<iostream>
#include<cstdio>
#include<cstring>
#include<queue>
#define MAX 205
const 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;
}
2013 编程之美 初赛第二场 管道系统小数据
最新推荐文章于 2024-07-15 08:24:26 发布