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
| int n, m, s1, t1, s2, t2, ans1, ans2; int startf[MAXnd + 10]; int ansf, anscos; signed main() { cntnex = 1; read(n, m, s1, t1); s2 = n + 1, t2 = n + 2; for (int i = 1, u, v, c, w; i <= m; ++i) { read(u, v, c, w); if (w >= 0) { Insert(u, v, c, w); Insert(v, u, 0, -w); } else if (w < 0) { startf[u] -= c, startf[v] += c; ans2 += w * c; Insert(u, v, 0, w); Insert(v, u, c, -w); } } for (int i = 1; i <= n; ++i) { if (startf[i] > 0) { Insert(s2, i, startf[i], 0); Insert(i, s2, 0, 0); } else if (startf[i] < 0) { Insert(i, t2, -startf[i], 0); Insert(t2, i, 0, 0); } } Insert(t1, s1, INF, 0); Insert(s1, t1, 0, 0); Ek(s2, t2, ansf, anscos); ans1 += cap[cntnex]; ans2 += anscos; head[s1] = nex[head[s1]]; head[t1] = nex[head[t1]]; cntnex -= 2; Ek(s1, t1, ansf, anscos); ans1 += ansf; ans2 += anscos; printf("%d %d\n", ans1, ans2); return 0; }
|