Submission #439905

#TimeUsernameProblemLanguageResultExecution timeMemory
439905dutchIslands (IOI08_islands)C++17
0 / 100
434 ms131076 KiB
#include <bits/stdc++.h> using namespace std; const int LIM = 1e6; vector<array<int, 2>> a(LIM), g[LIM]; bitset<LIM> vis; pair<long long, int> c; long long toRoot; int r; void dfs(int u, int p, long long d){ vis[u] = 1, c = max(c, {d, u}); for(auto &[v, w] : g[u]) if(v != p){ if(v == r) toRoot = d; else dfs(v, u, d + (long long)w); } } int main(){ ios_base::sync_with_stdio(0); cin.tie(0); int n; cin >> n; for(int i=0; i<n; ++i){ cin >> a[i][0] >> a[i][1]; g[--a[i][0]].push_back({i, a[i][1]}); } long long ans = 0; for(r=0; r<n; ++r){ if(vis[r]) continue; dfs(r, r, 0); long long curr = toRoot + a[r][1]; dfs(c.second, -1, 0); curr = max(curr, c.first); ans += curr; } cout << ans; }
#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...