和1532题一样的套路
#include <iostream>
#include <queue>
#include <cstring>
#include <algorithm>
#define INF 99999999
#define len 1005
using namespace std;
int r[len][len];
int pre[len];
bool vis[len];
int N,M;
bool BFS(int s, int t)
{
memset(pre,-1,sizeof(pre));
memset(vis,false,sizeof(vis));
queue<int> que;
que.push(s);
pre[s] = s;
vis[s] = true;
int p;
while(!que.empty())
{
p = que.front();
que.pop();
for(int i = 1; i <= M; ++i)
{
if(r[p][i] > 0 && !vis[i])
{
pre[i] = p;
vis[i] = true;
if(i == t)
return true;
que.push(i);
}
}
}
return false;
}
int EK(int s, int t)
{
int maxflow = 0,d;
while(BFS(s,t))
{
d = INF;
for(int i = t; i != s; i = pre[i])
d = min(d,r[pre[i]][i]);
for(int i = t; i != s; i = pre[i])
{
r[pre[i]][i] -= d;
r[i][pre[i]] += d;
}
maxflow += d;
}
return maxflow;
}
int main()
{
int T,time;
cin >> T;
while(T--)
{
time = 1;
while(cin >> M >> N)
{
memset(r,0,sizeof(r));
int s,e,c;
for(int i = 0; i < N; ++i)
{
cin >> s >> e >> c;
r[s][e] += c;
}
cout << "Case " << time << ": " << EK(1,M) << endl;
++time;
}
}
return 0;
}