Bellman_Ford 增广 WA 求助
查看原帖
Bellman_Ford 增广 WA 求助
637796
Xy_top楼主2023/7/11 19:22
#include <queue>
#include <iostream>
#define int long long
using namespace std;
int n, m, s, t, ans;
int u[205], v[205], w[205];
int f[205][205], parent[205];
int dis[205];
queue <int> q;

bool Bellman_Ford () {
	for (int i = 1; i <= n; i ++)
		dis[i] = 0x7fffffff;
	dis[s] = 1;
	for (int i = 1; i <= n; i ++) {
		for (int j = 1; j <= m; j ++) {
			if (f[u[j] ][v[j] ]) {
				if (dis[v[j] ] > dis[u[j] ] + 1) {
					dis[v[j] ] = dis[u[j] ] + 1;
					parent[v[j] ] = u[j];
				}
			}
			if (f[v[j] ][u[j] ]) {
				if (dis[u[j] ] > dis[v[j] ] + 1) {
					dis[u[j] ] = dis[v[j] ] + 1;
					parent[u[j] ] = v[j];
				}
			}
		}
	}
	return dis[t] < 0x7fffffff;
}

int augment () {
	int max_flow = 2147483647;
	for (int i = t; i != s; i = parent[i])
		max_flow = min (max_flow, f[parent[i] ][i]);
	for (int i = t; i != s; i = parent[i]) {
		f[parent[i] ][i] -= max_flow;
		f[i][parent[i] ] += max_flow;
	}
	return max_flow;
}

signed main () {
	cin >> n >> m >> s >> t;
	for (int i = 1; i <= m; i ++) {
		cin >> u[i] >> v[i] >> w[i];
		f[u[i] ][v[i] ] += w[i];
	}
	while (Bellman_Ford () )
		ans += augment ();
	cout << ans;
	return 0;
}
2023/7/11 19:22
加载中...