Submission #478102

#TimeUsernameProblemLanguageResultExecution timeMemory
478102starplatIslands (IOI08_islands)C++14
24 / 100
1769 ms131072 KiB
#include <bits/stdc++.h> #define int long long using namespace std; int n,v,w,vis[1000005],dist[1000005],path,ans; vector<pair<int,int>> g[1000005]; vector<int> clr; priority_queue<pair<int,int>> q; void dij(int x) { q.push({0,x}); while (q.size()){ v=q.top().second; q.pop(); if (vis[v]) continue; vis[v]=1; clr.push_back(v); for (auto i:g[v]){ if (vis[i.first]) continue; if (dist[i.first]<dist[v]+i.second){ dist[i.first]=dist[v]+i.second; q.push({dist[i.first],i.first}); } } } } signed main() { cin>>n; for (int i=1;i<=n;i++){ cin>>v>>w; g[i].push_back({v,w}); g[v].push_back({i,w}); } for (int i=1;i<=n;i++){ if (!vis[i]) { dij(i); int mx=0,node=0; for (int i:clr) { if (dist[i]>mx) mx=dist[i],node=i; dist[i]=0,vis[i]=0; } //cout<<node<<" "<<mx<<"\n"; path=0; dij(node); for (int i:clr) path=max(path,dist[i]); clr.clear(); ans+=path; //cout<<path<<"\n"; } } cout<<ans<<"\n"; } //for each connected component find the tree diameter,and travel to next subgraph? //dijstra with longest path? //love to do graph questions, at the same time hate don't no how to solve graph questions
#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...