제출 #1062411

#제출 시각아이디문제언어결과실행 시간메모리
1062411tamir1Islands (IOI08_islands)C++17
36 / 100
2040 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[1000005]; vector<int> com[1000005]; ll ans,l,dis[1000005]; bitset<1000005> 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){ ll mx=0,m; for(int i:com[p]){ q.push({0,i}); dijk(); m=0; for(int j:com[p]){ m=max(m,dis[j]); dis[j]=0; ok[j]=0; } mx=max(mx,m); } 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...