27分求助

P8269 [USACO22OPEN] Visits S

@[_Revenge_](/user/750803) 你食不食油饼,拓扑不会? 你就觉的入读只会为1,你是不是以为只有环,你没有寄吧吧,你TM想清楚再发帖好不好,wyy,jbl
by _Revenge_ @ 2023-01-08 22:14:30


@[_Revenge_](/user/750803) 拓扑求浇浇![](//图.tk/q)
by _Revenge_ @ 2023-01-08 22:15:05


@[_Revenge_](/user/750803) 给我爪巴,写好发给你!![](//图.tk/f)
by _Revenge_ @ 2023-01-08 22:15:40


@[_Revenge_](/user/750803) 说 @[_Shu](/user/556013) 是不是AKIOI,说对了我给你
by _Revenge_ @ 2023-01-08 22:22:24


@[_Revenge_](/user/750803) 是!
by _Revenge_ @ 2023-01-08 22:23:03


@[_Revenge_](/user/750803) 拿去! ```cpp #include <bits/stdc++.h> using namespace std; typedef long long ll; typedef double db; const int N = 1e5 + 50; const int M = 1e5 + 50; const int Mod = 1e9 + 7; #define int long long inline int read() { int x = 0, f = 1; char ch = getchar(); while (ch < '0' || ch > '9') { if (ch == '-') f = -1; ch = getchar(); } while (ch >= '0' && ch <= '9') { x = (x << 1) + (x << 3) + (ch ^ 48); ch = getchar(); } return x * f; } int n; int p[N], v[N]; bool vis[N]; int in[N]; int ans = 0; int Min; void dfs(int u) { vis[u] = 1; if (vis[p[u]]) { Min = min(Min, v[u]); return; } Min = min(Min, v[u]); dfs(p[u]); } queue<int> q; void topo() { for (int i = 1; i <= n; i++) { if (!in[i]) q.push(i); } while (!q.empty()) { int x = q.front(); q.pop(); ans += v[x]; in[p[x]]--; vis[x] = 1; if (!in[p[x]]) q.push(p[x]); } } signed main() { n = read(); for (int i = 1; i <= n; ++i) p[i] = read(), in[p[i]]++, v[i] = read(); topo(); for (int i = 1; i <= n; ++i) if (!vis[i]) ans += v[i]; for (int i = 1; i <= n; ++i) if (!vis[i]) { Min = Mod; dfs(i); ans -= Min; } printf("%lld\n", ans); return 0; } ```
by _Revenge_ @ 2023-01-08 22:23:33


《自导自演》
by lazy_doghead @ 2023-01-08 22:44:07


JC?!
by incra @ 2023-10-04 12:45:31


|