题目链接:http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=GRL_6_A
题意:求最大流
solution:
#include <bits/stdc++.h>
using namespace std;
struct edge{
int to, w, p;
};
vector<edge> x[110];
int n, m, a, b, c, vis[110];
int dfs(int s, int t, int r)
{
if (s == t)return r;
vis[s] = true;
for (int i = 0; i < x[s].size(); ++i){
if (!vis[x[s][i].to] && x[s][i].w > 0){
int temp = dfs(x[s][i].to, t, min(r, x[s][i].w));
if (temp > 0){
x[s][i].w -= temp;
x[x[s][i].to][x[s][i].p].w += temp;
return temp;
}
}
}
return 0;
}
int main()
{
cin >> n >> m;
for (int i = 0; i < m; ++i){
scanf("%d%d%d", &a, &b, &c);
x[a].push_back(edge{b, c, x[b].size()});
x[b].push_back(edge{a, 0, x[a].size() - 1});
}
int res = 0;
while (true){
memset(vis, 0, sizeof(vis));
int temp = dfs(0, n - 1, 1 << 30);
if (temp == 0)break;
res += temp;
}
printf("%d\n", res);
return 0;
}