这应该是最简单的最大流问题了,直接套模板。。。。
#include<stdio.h>
#include<iostream>
#include<map>
#include<string.h>
#include<queue>
#include<vector>
#include<math.h>
#include<algorithm>
#define inf 0x3f3f3f3f
using namespace std;
int dis[20];
int flow[500][500];
int n,m;
int bfs()
{
memset(dis,-1,sizeof(dis));
queue<int>Q;
dis[1]=1;
Q.push(1);
while(!Q.empty())
{
int top=Q.front();
Q.pop();
for(int i=1;i<=n;i++)
{
if(flow[top][i]>0&&dis[i]<0)
{
dis[i]=dis[top]+1;
Q.push(i);
}
}
}
if(dis[n]>0)return 1;
return 0;
}
int dinic(int x,int k)
{
if(x==n)
return k;
int y;
for(int i=1;i<=n;i++)
{
if(flow[x][i]>0&&dis[i]==dis[x]+1&&(y=dinic(i,min(k,flow[x][i]))))
{
flow[x][i]-=y;
flow[i][x]+=y;
return y;
}
}
return 0;
}
int main()
{
int t;
scanf("%d",&t);
int cas=1;
while(t--)
{
memset(flow,0,sizeof(flow));
scanf("%d%d",&n,&m);
int a,b,c;
for(int i=0;i<m;i++)
{
scanf("%d%d%d",&a,&b,&c);
flow[a][b]+=c;
}
int ans=0;
while(bfs())
{
//cout<<"++"<<endl;
int res;
while(res=dinic(1,inf))ans+=res;
}
printf("Case %d: %d\n",cas++,ans);
}
}