呃,但是我是新手,要多联系的对吧....
#include <cstdio>
#include <cstring>
#include <climits>
#include <algorithm>
#include <queue>
using namespace std;
const int INF = INT_MAX>>1;
const int MAX_V = 20;
int G[MAX_V][MAX_V];
int level[MAX_V];
int n, m;
bool BFS(int s, int t) {
memset(level, -1, sizeof(level));
queue<int> Q; int p;
level[s] = 0;
Q.push(s);
while (!Q.empty()) {
p = Q.front(); Q.pop();
for (int i = 0; i < n; ++i) {
if (G[p][i] > 0 && level[i] < 0) {
level[i] = level[p] + 1;
Q.push(i);
if (i == t) return true;
}
}
}
return false;
}
int dfs(int s, int t, int flow) {
if (s == t) return flow;
int res = 0, tmp;
for (int i = 0; i < n; ++i) {
if (G[s][i] > 0 && level[i] == level[s] + 1) {
tmp = dfs(i, t, min(flow, G[s][i]));
G[s][i] -= tmp;
G[i][s] += tmp;
res += tmp; flow -= tmp;
}
}
return res;
}
int dinic(int s, int t) {
int flow = 0;
while (BFS(s, t)) flow += dfs(s, t, INF);
return flow;
}
int main() {
int T;
scanf(" %d", &T);
while (T--) {
scanf(" %d %d", &n, &m);
int s, t, c;
memset(G, 0, sizeof(G));
for (int i = 0; i < m; ++i) {
scanf(" %d %d %d", &s, &t, &c);
G[s-1][t-1] += c;
}
static int _time = 0;
printf("Case %d: %d\n", ++_time, dinic(0, n-1));
}
return 0;
}