Submission #1019796

#TimeUsernameProblemLanguageResultExecution timeMemory
1019796ttamxIslands (IOI08_islands)C++17
90 / 100
490 ms131072 KiB
#include<bits/stdc++.h> using namespace std; using ll = long long; const int N=1e6+5; int n; pair<int,int> nxt[N]; int deg[N]; queue<int> q; vector<pair<int,int>> adj[N]; ll dp[N]; ll dia,ans; void dfs(int u){ ll mx=0,mx2=0; for(auto [v,w]:adj[u]){ dfs(v); mx2=max(mx2,dp[v]+w); if(mx<mx2)swap(mx,mx2); } dp[u]=mx; dia=max(dia,mx+mx2); } int main(){ cin.tie(nullptr)->sync_with_stdio(false); cin >> n; for(int i=1;i<=n;i++){ auto &[v,w]=nxt[i]; cin >> v >> w; deg[v]++; } for(int i=1;i<=n;i++)if(!deg[i])q.emplace(i); while(!q.empty()){ int u=q.front(); q.pop(); auto [v,w]=nxt[u]; adj[v].emplace_back(u,w); if(--deg[v]==0)q.emplace(v); } for(int i=1;i<=n;i++)if(deg[i]){ ll len=0; vector<pair<int,ll>> comp; for(int u=i;deg[u];){ comp.emplace_back(u,len); deg[u]=0; auto [v,w]=nxt[u]; len+=w; u=v; } int m=comp.size(); dia=0; for(auto [u,w]:comp)dfs(u); deque<pair<ll,int>> dq; for(auto [u,w]:comp){ ll val=dp[u]-w; while(!dq.empty()&&dq.back().first<val)dq.pop_back(); dq.emplace_back(val,u); } for(auto [u,w]:comp){ if(!dq.empty()&&dq.front().second==u)dq.pop_front(); if(!dq.empty())dia=max(dia,w+len+dp[u]+dq.front().first); ll val=dp[u]-w-len; while(!dq.empty()&&dq.back().first<val)dq.pop_back(); dq.emplace_back(val,u); } ans+=dia; } cout << ans; }

Compilation message (stderr)

islands.cpp: In function 'int main()':
islands.cpp:54:13: warning: unused variable 'm' [-Wunused-variable]
   54 |         int m=comp.size();
      |             ^
#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...