社区讨论
关于数据范围
P3376【模板】网络最大流参与者 3已保存回复 7
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 7 条
- 当前快照
- 1 份
- 快照标识符
- @lobv67kv
- 此快照首次捕获于
- 2023/10/30 03:28 2 年前
- 此快照最后确认于
- 2023/11/04 08:19 2 年前
CPP
#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define ull unsigned long long
#define reg register
#define il inline
const int inf = 1 << 28;
const int N = 205, M = 10005;
int head[N], ver[M], wei[M], nxt[M], d[N], now[M];
int n, m, s, t, cnt = 1;
ll maxflow;
queue<int> q;
void add(int x, int y, int z) {
ver[++cnt] = y, wei[cnt] = z, nxt[cnt] = head[x], head[x] = cnt;
}
bool bfs() {
memset(d, 0, sizeof(d));
while (q.size()) q.pop();
q.push(s); d[s] = 1; now[s] = head[s];
while (!q.empty()) {
int x = q.front(); q.pop();
for (int i = head[x]; i; i = nxt[i])
if (wei[i] && !d[ver[i]]) {
q.push(ver[i]);
now[ver[i]] = head[ver[i]];
d[ver[i]] = d[x] + 1;
if (ver[i] == t) return 1;
}
}
return 0;
}
int dinic(int x, int flow) {
if (x == t) return flow;
int rest = flow, k, i;
for (i = now[x]; i && rest; i = nxt[i])
if (wei[i] && d[ver[i]] == d[x] + 1) {
k = dinic(ver[i], min(rest, wei[i]));
if (!k) d[ver[i]] = 0;
wei[i] -= k;
wei[i ^ 1] + k;
rest -= k;
}
now[x] = i;
return flow - rest;
}
int main()
{
scanf("%d%d", &n, &m);
scanf("%d%d", &s, &t);
for (int i = 1; i <= m; ++i) {
int x, y, c; scanf("%d%d%d", &x, &y, &c);
add(x, y, c), add(y, x, 0);
}
int flow = 0;
while (bfs())
while (flow = dinic(s, inf)) maxflow += flow;
printf("%lld", maxflow);
return 0;
}
这里我的 取到 都可以过
然而 的极限能到 -,所以是数据较弱吗?
回复
共 7 条回复,欢迎继续交流。
正在加载回复...