This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#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 time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |