Submission #478096

#TimeUsernameProblemLanguageResultExecution timeMemory
478096starplatIslands (IOI08_islands)C++14
0 / 100
145 ms26708 KiB
#include <bits/stdc++.h> #define int long long using namespace std; int n,v,w,vis[100005],dist[100005],path,ans; vector<pair<int,int>> g[100005]; 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 (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; } path=0; dij(node); for (int i:clr) path=max(path,dist[i]); clr.clear(); ans+=path; } } 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...