Submission #1130778

#TimeUsernameProblemLanguageResultExecution timeMemory
1130778kmkmkmkmIslands (IOI08_islands)C++20
100 / 100
328 ms43608 KiB
#include <bits/stdc++.h> #define ss second #define ff first #define int long long #define en '\n' #define pb push_back #define pii pair<int, int> #define vi vector<int> #define f(st, x, d) for (int i = st; i < x; i += d) #define carray(x) for (auto k : x) cout << k << ' '; #define all(x) begin(x), end(x) using namespace std; const int mod = 1e9 + 9; const int N = 2e6 + 5; const int INF = 1e9; int f[N], w[N], g[N], a[N], deg[N], ans; void solve() { int n; cin >> n; for (int i = 1; i <= n; i++) { cin >> a[i] >> w[i]; deg[a[i]]++; } queue<int> q; for (int i = 1; i <= n; i++) if (deg[i] == 0) q.push(i); while (!q.empty()) { int p = q.front(); int contribution = f[p] + w[p]; g[a[p]] = max({g[a[p]], f[a[p]] + contribution, g[p]}); if(f[a[p]] < contribution) f[a[p]] = contribution; deg[a[p]]--; q.pop(); if (deg[a[p]] == 0) q.push(a[p]); } for (int i = 1; i <= n; i++) { if (deg[i] > 0) { int start = i, p = a[i]; int max1 = f[start], max2 = f[start], sum = w[start], maxAns1 = g[start], maxAns2 = -1e18; for (; p != start; p = a[p]) { maxAns1 = max({maxAns1, g[p], f[p] + sum + max1}); maxAns2 = max(maxAns2, f[p] - sum + max2); max1 = max(max1, f[p] - sum); max2 = max(max2, f[p] + sum); sum += w[p]; deg[p] = 0; } ans += max(maxAns1, maxAns2 + sum); } } cout << ans << '\n'; } int32_t main() { ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0); int t = 1; //cin >> t; while (t--) solve(); return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...