40行逆天AC代码 不知有无正确性
查看原帖
40行逆天AC代码 不知有无正确性
776004
imnotcfz楼主2025/8/3 11:04

rt,本蒟蒻没学过网络流,上 OI-Wiki 简单看了一下基本概念,然后写了个 dfs,感觉很奇怪但又莫名其妙的过了。

有没有大佬看看正确性有没有保证。

核心思路是从汇点开始反推,所以这里建的是反图。

提交寄录

#include <iostream>
#include <vector>
using namespace std;

int n, m, s, t, cnt;
bool vis[2000005];
// 用 vector 邻接表会超时
int nxt[2000005], head[2000005], to[2000005];
long long cap[2000005];  // 边的容量

void add(int u, int v, long long w) {
    nxt[++cnt] = head[u];
    head[u] = cnt;
    to[cnt] = v;
    cap[cnt] = w;
}

long long dfs(int x) {
    if (x == s) return 0x3f3f3f3f3f3f3f3f;
    long long ans = 0;
    for (int i = head[x]; i; i = nxt[i]) {
        if (vis[to[i]]) continue;
        ans += min(cap[i], dfs(to[i]));
    }
    return ans;
}

int main() {
    ios::sync_with_stdio(false);
    cin.tie(0); cout.tie(0);
    cin >> n >> m >> s >> t;
    int u, v;
    long long w;
    for (int i = 1; i <= m; i++) {
        cin >> u >> v >> w;
        add(v, u, w);  // 建反图
    }
    cout << dfs(t);
    return 0;
}
2025/8/3 11:04
加载中...