Submission #503743

#TimeUsernameProblemLanguageResultExecution timeMemory
503743tabrIslands (IOI08_islands)C++17
40 / 100
2097 ms131076 KiB
#include <bits/stdc++.h> using namespace std; #ifdef tabr #include "library/debug.cpp" #else #define debug(...) #endif struct dsu { vector<int> p; vector<int> sz; int n; dsu(int _n) : n(_n) { p.resize(n); iota(p.begin(), p.end(), 0); sz.assign(n, 1); } inline int get(int x) { if (p[x] == x) { return x; } else { return p[x] = get(p[x]); } } inline bool unite(int x, int y) { x = get(x); y = get(y); if (x == y) { return false; } if (sz[x] > sz[y]) { swap(x, y); } p[x] = y; sz[y] += sz[x]; return true; } inline bool same(int x, int y) { return (get(x) == get(y)); } }; int main() { ios::sync_with_stdio(false); cin.tie(0); int n; cin >> n; vector<vector<int>> g(n); vector<int> l(n); vector<int> e(n); dsu uf(n); for (int i = 0; i < n; i++) { int j; cin >> j >> l[i]; j--; e[i] = j; uf.unite(i, j); g[i].emplace_back(i); g[j].emplace_back(i); } for (int i = 0; i < n; i++) { if (e[e[i]] == i) { l[e[i]] = l[i] = max(l[e[i]], l[i]); } } vector<long long> a(n); vector<int> b(n); for (int i = 0; i < n; i++) { long long t = 0; function<void(int, int, long long)> dfs = [&](int v, int p, long long now) { b[v] = 1; t = max(t, now); for (int id : g[v]) { int to = v ^ id ^ e[id]; if (to == p || b[to]) { continue; } dfs(to, v, now + l[id]); } b[v] = 0; }; dfs(i, -1, 0); a[uf.get(i)] = max(a[uf.get(i)], t); } cout << accumulate(a.begin(), a.end(), 0LL) << '\n'; 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...