不开氧气 30 分,开了氧气 AC,为啥

P1343 地震逃生

```cpp #include <bits/stdc++.h> #define int long long using namespace std; int n, m, x; const int N = 2e6 + 2e4; const int INF = 1e10; struct edge { int ed; int len; int id; }; vector <edge> e[N]; int dep[N], cur[N]; bool bfs() { memset(dep, -1, sizeof(dep)); memset(cur, 0, sizeof(cur)); dep[1] = 0; queue <int> q; q.push(1); while(!q.empty()) { int st = q.front(); q.pop(); for(int i = 0; i < e[st].size(); i = i + 1) { int ed = e[st][i].ed; if(dep[ed] == -1 && e[st][i].len) { dep[ed] = dep[st] + 1; q.push(ed); } } } return (dep[n] != -1); } int dfs(int st, int limit) { if(st == n) return limit; for(int i = cur[i]; i < e[st].size(); i = i + 1) { cur[i] = i; int ed = e[st][i].ed; if(e[st][i].len && dep[ed] == dep[st] + 1) { int t = dfs(ed, min(limit, e[st][i].len)); if(t) { e[st][i].len -= t; e[ed][e[st][i].id].len += t; return t; } } } return 0; } int dinic() { int r = 0, f = 0; while(bfs()) { while(f = dfs(1, INF)) r += f; } return r; } signed main() { cin >> n >> m >> x; for(int i = 1; i <= m; i = i + 1) { int st, ed, len; cin >> st >> ed >> len; int sti = e[st].size(); int edi = e[ed].size(); e[st].push_back((edge){ed, len, edi}); e[ed].push_back((edge){st, 0, sti}); } int f = dinic(); if(f == 0) cout << "Orz Ni Jinan Saint Cow!"; else cout << f << " " << (x + f - 1) / f; return 0; } ```
by AC_love @ 2023-09-27 16:13:31


UB
by Zi_Gao @ 2023-09-27 16:31:06


@[Zi_Gao](/user/554698) 按理说 UB 不应该是不开 O2 能过开了 O2 过不去吗,这个怎么反过来了? 而且可以具体说说是哪里 UB 了吗
by AC_love @ 2023-09-27 16:40:32


@[AC_love](/user/186472) O2优化的时候优化了你可能出错的地方。
by Isharmla @ 2023-09-27 16:45:09


@[Isharmla](/user/1061320) 那么应该是什么地方出错了呢
by AC_love @ 2023-09-27 16:47:23


@[AC_love](/user/186472) ```cpp const int INF = 1e10; ``` 你是认真的吗?
by Present_Coming_Time @ 2023-09-27 17:00:10


`cur[i]`改成 `cur[st]`:https://www.luogu.com.cn/record/126329617 ```cpp for(int i = cur[st]; i < e[st].size(); i = i + 1) { cur[st] = i; ```
by Terrible @ 2023-09-27 17:01:53


@[Present_Coming_Time](/user/793625) ```cpp #define int long long ``` 神奇不神奇?
by Terrible @ 2023-09-27 17:02:46


开 O2 会改变一堆未定义/未明确的实现问题,会导致一些奇怪情况的发生,基本不必深究。 另外“按理来说”用的很无理。
by Terrible @ 2023-09-27 17:05:14


@[Terrible](/user/195942) 好强,拜谢
by AC_love @ 2023-09-27 17:17:29


| 下一页