1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86
|
#include <iostream> #include <cstdio> #include <cmath> #include <string> #include <cstring> #include <algorithm> #include <limits> #include <vector> #include <stack> #include <queue> #include <set> #include <map> #define lowbit(x) ( x&(-x) ) #define INF 1e9+7 #define pi 3.141592653589793 #define e 2.718281828459045 using namespace std; typedef long long ll; const int maxN=1005; int N,M; int r[maxN][maxN], pre[maxN], flow[maxN][maxN]; int dis[maxN]; queue<int> q; int bfs() { while(!q.empty()) q.pop(); memset(dis, -1, sizeof dis); dis[1] = 0; q.push(1); while(!q.empty()) { int u = q.front(); q.pop(); for (int i = 1; i <= N;i++) { if(flow[u][i]>0&&dis[i]==-1) { dis[i] = dis[u] + 1; q.push(i); } } } return dis[N] != -1; } int dfs(int x,int remain) { if(remain==0||x==N) return remain; int k; for (int i = 1; i <= N;i++) { if(flow[x][i]>0&&dis[i]==dis[x]+1&&(k=dfs(i,min(remain,flow[x][i])))) { flow[x][i] -= k; flow[i][x] += k; return k; } } return 0; } int main() { int t; scanf("%d", &t); int cnt=1; while(t--) { memset(flow, 0, sizeof flow); scanf("%d%d", &N, &M); for (int i = 0; i < M;i++) { int a, b, c; scanf("%d%d%d", &a, &b, &c); flow[a][b] += c; } int ans = 0; int res; while(bfs()) { while(res=dfs(1,INF)) ans += res; } printf("Case %d: %dn",cnt++, ans); } }
|
近期评论