理论:http://mindlee.net/2011/11/19/network-flow/
//Edmonds-Karp(EK)hdu3549
#include <cstdio>
#include <algorithm>
#include <queue>
using namespace std;
const int M=110;
const int inf=1<<30;
int capacity[M][M],flow[M],pre[M],n,m;
queue<int> Q;
void init(){
for (int i=1;i<=n;++i)
for (int j=1;j<=n;++j)
capacity[i][j]=0;
}
int BFS(int s,int t){
for (long i=1;i<=n;++i) pre[i]=-1;
while (!Q.empty()) Q.pop();
pre[s]=s; flow[s]=inf;
Q.push(s);
while (!Q.empty()){
int u=Q.front(); Q.pop();
if (u==t) break;
for (int i=1;i<=n;++i)
if (pre[i]==-1 && capacity[u][i]>0){
pre[i]=u;
flow[i]=std::min(flow[u],capacity[u][i]);
Q.push(i);
}
}
if (pre[t]==-1) return -1;
else return flow[t];
}
int MaxFlow(int s,int t){
int SumFlow=0,temp;
while (temp=BFS(s,t)!=-1){
long k=t;
while (k!=pre[k]){
capacity[pre[k]][k]-=temp;
capacity[k][pre[k]]+=temp;
k=pre[k];
}
SumFlow+=temp;
}
return SumFlow;
}
int main(){
int t; scanf("%d",&t);
for (int i=1;i<=t;++i){
scanf("%d%d",&n,&m);
init();
for (int j=1;j<=m;++j){
int u,v,c;
scanf("%d%d%d",&u,&v,&c);
if (u==v) continue;
capacity[u][v]+=c;
}
printf("Case %d: %d\n",i,MaxFlow(1,n));
}
return 0;
}