제출 #1062404

#제출 시각아이디문제언어결과실행 시간메모리
1062404tamir1Islands (IOI08_islands)C++17
24 / 100
207 ms131072 KiB
#include<bits/stdc++.h> #define ll long long #define ff first #define ss second using namespace std; int n,x,p; vector<pair<int,ll>> v[1000002]; vector<int> com[1000001]; ll ans,l,dis[1000001]; bitset<1000001> ok; priority_queue<pair<ll,int>> q; void dfs(int x){ if(ok[x]) return; ok[x]=1; com[p].push_back(x); for(pair<int,ll> i:v[x]){ dfs(i.ff); } } void dijk(){ while(!q.empty()){ ll d=q.top().ff; int x=q.top().ss; q.pop(); if(ok[x]) continue; ok[x]=1; dis[x]=d; for(pair<int,ll> i:v[x]){ if(!ok[i.ff]) q.push({d+i.ss,i.ff}); } } } ll solve(int p){ q.push({0,com[p][0]}); dijk(); ll mx=0; int x; for(int i:com[p]){ if(mx<dis[i]){ x=i; mx=dis[i]; } dis[i]=0; ok[i]=0; } q.push({0,x}); dijk(); mx=0; for(int i:com[p]){ mx=max(dis[i],mx); } //cout << mx << "\n"; return mx; } int main(){ ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0); cin >> n; for(int i=1;i<=n;i++){ cin >> x >> l; v[i].push_back({x,l}); v[x].push_back({i,l}); } for(int i=1;i<=n;i++){ if(!ok[i]){ p++; dfs(i); } } ok.reset(); for(int i=1;i<=p;i++) ans+=solve(i); 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...