Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #pragma GCC optimize("Ofast,unroll-loops")
- #include <bits/stdc++.h>
- #define sz(a) ((int)(a).size())
- #define all(a) (a).begin(), (a).end()
- #define fi first
- #define se second
- using namespace std;
- #ifndef LOCAL
- #define endl '\n'
- #endif
- typedef long long ll;
- typedef pair<int, int> pii;
- const int NMAX = 105;
- const int INF = 2e9+5;
- struct Edge {
- int dest, flow, rev;
- };
- int n, s, t, m;
- vector<Edge> g[NMAX];
- int d[NMAX], last[NMAX];
- void io() {
- #ifdef LOCAL
- freopen("input.txt", "r", stdin);
- #else
- ios_base::sync_with_stdio(false);
- cin.tie(0);
- cout.tie(0);
- #endif
- }
- void add_edge(int x, int y, int c) {
- g[x].push_back({ y, c, sz(g[y]) });
- g[y].push_back({ x, 0, sz(g[x]) - 1 });
- }
- void read() {
- cin >> n;
- if (n == 0) exit(0);
- cin >> s >> t >> m;
- for (int i = 1, x, y, c; i <= m; i++) {
- cin >> x >> y >> c;
- add_edge(x, y, c);
- add_edge(y, x, c);
- }
- }
- bool bfs() {
- memset(d, 0, sizeof(d));
- memset(last, 0, sizeof(last));
- queue<int> q;
- q.push(s);
- d[s] = 1;
- while (!q.empty()) {
- int u = q.front();
- q.pop();
- if (u == t) continue;
- for (auto &it : g[u]) {
- if (!d[it.dest] && it.flow > 0) {
- d[it.dest] = d[u] + 1;
- q.push(it.dest);
- }
- }
- }
- return d[t];
- }
- int dfs(int x, int flow = INF) {
- if (x == t) return flow;
- for (; last[x] < sz(g[x]); last[x]++) {
- Edge &e = g[x][last[x]];
- if (e.flow > 0 && d[e.dest] == d[x] + 1) {
- if (int ret = dfs(e.dest, min(flow, e.flow))) {
- e.flow -= ret;
- g[e.dest][e.rev].flow += ret;
- return ret;
- }
- }
- }
- return 0;
- }
- int dinic() {
- int max_flow = 0;
- while (bfs()) {
- while (int flow = dfs(s))
- max_flow += flow;
- }
- for (int i = 1; i <= n; i++) g[i].clear();
- return max_flow;
- }
- signed main() {
- io();
- for (int i = 1; ; i++) {
- read();
- cout << "Network " << i << endl << "The bandwidth is " << dinic() << '.' << endl << endl;
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement