Submission #232727

#TimeUsernameProblemLanguageResultExecution timeMemory
232727FieryPhoenixIslands (IOI08_islands)C++11
12 / 100
917 ms131076 KiB
#include <bits/stdc++.h> using namespace std; mt19937 rng(chrono::steady_clock::now().time_since_epoch().count()); typedef long long ll; typedef long double ld; #define INF 2001001001 #define MOD 1000000007 int N; int L[1000001]; vector<pair<int,int>>adj[1000001]; bool vis[1000001]; ll ans,mx,mx2; ll dis[1000001]; int prop,parStore; pair<int,int>back; ll backCost; int bad; void dfs(int node, int par){ //cout<<"dfs: "<<node<<' '<<par<<endl; vis[node]=true; vector<ll>v; for (auto p:adj[node]){ if (vis[p.first]){ if (p.first!=par && backCost==-1){ back={p.first,node}; prop=node; parStore=par; backCost=p.second; } } else{ dfs(p.first,node); v.push_back(dis[p.first]+p.second); } } if (node==prop && par!=back.first) prop=par; if ((int)v.size()==0) return; sort(v.begin(),v.end()); dis[node]=v.back(); if (v.size()==1) mx=max(mx,v[0]); else mx=max(mx,v.back()+v[(int)v.size()-2]); } void dfs2(int node, int par, ll depth){ mx2=max(mx2,depth); for (auto p:adj[node]){ if (p.first==par || p.first==bad) continue; dfs2(p.first,node,depth+p.second); } } map<pair<int,int>,int>mp; int main() { //ios_base::sync_with_stdio(0);cin.tie(0); //freopen (".in","r",stdin); //freopen (".out","w",stdout); scanf("%d",&N); for (int i=1;i<=N;i++){ int Y; scanf("%d%d",&Y,&L[i]); int x=i,y=Y; if (x>y) swap(x,y); mp[{x,y}]=max(mp[{x,y}],L[i]); } for (auto it:mp){ adj[it.first.first].push_back({it.first.second,it.second}); adj[it.first.second].push_back({it.first.first,it.second}); } for (int i=1;i<=N;i++) if (!vis[i]){ //cout<<"COMPONENT: "<<i<<endl; mx=0; backCost=-1; dfs(i,i); if (backCost==-1){ ans+=mx; continue; } //cout<<"MX: "<<mx<<endl; mx2=0; bad=back.second; //cout<<"dfs2: "<<back.first<<' '<<prop<<endl; dfs2(back.first,prop,0); ll temp=mx2; mx2=0; bad=back.first; //cout<<"dfs2: "<<back.second<<' '<<parStore<<endl; dfs2(back.second,parStore,0); //cout<<"MX2: "<<temp<<' '<<mx2<<endl; mx=max(mx,mx2+temp+backCost); ans+=mx; } cout<<ans<<endl; return 0; }

Compilation message (stderr)

islands.cpp: In function 'int main()':
islands.cpp:65:8: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
   scanf("%d",&N);
   ~~~~~^~~~~~~~~
islands.cpp:68:10: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
     scanf("%d%d",&Y,&L[i]);
     ~~~~~^~~~~~~~~~~~~~~~~
#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...