Submission #118147

#TimeUsernameProblemLanguageResultExecution timeMemory
118147baluteshihIslands (IOI08_islands)C++14
80 / 100
1753 ms131072 KiB
#include <bits/stdc++.h> #define jizz ios::sync_with_stdio(0),cin.tie(0),cout.tie(0); #define pb push_back #define ET cout << "\n" #define MEM(i,j) memset(i,j,sizeof i) #define F first #define S second #define MP make_pair #define ALL(v) v.begin(),v.end() #define DB(a,s,e) {for(int i=s;i<e;++i) cout << a[i] << " ";ET;} using namespace std; typedef long long ll; typedef pair<int,int> pii; typedef pair<ll,ll> pll; vector<int> G[1000005]; vector<pll> cir; deque<int> dq; bitset<1000005> yc,vis; ll M; pii edge[1000005]; const ll INF=1e18; bool dfs(int u,int f) { int flag=0; vis[u]=1; for(int i:G[u]) if(i!=f) if(!vis[edge[i].F^u]) if(dfs(edge[i].F^u,i)) flag=1,cir.back().S=edge[i].S; else; else if(!yc[u]) flag=1,yc[edge[i].F^u]=1,cir.pb(MP(edge[i].F^u,edge[i].S)); if(flag) if(yc[u]) flag=0; else cir.pb(MP(u,0)),yc[u]=1; return flag; } ll dfs2(int u) { ll mx=0,sx=0; yc[u]=1; for(int i:G[u]) if(!yc[edge[i].F^u]) { ll d=dfs2(edge[i].F^u)+edge[i].S; if(d>mx) sx=mx,mx=d; else if(d>sx) sx=d; } M=max(M,sx+mx); vector<int>().swap(G[u]); return mx; } int main() {jizz int n; ll ans=0,sum; cin >> n; for(int i=1;i<=n;++i) { cin >> edge[i].F >> edge[i].S,edge[i].F^=i; G[i].pb(i); if(edge[i].F!=0) G[edge[i].F^i].pb(i); } for(int i=1;i<=n;++i) if(!vis[i]) { vector<pll>().swap(cir),M=0,dfs(i,-1); deque<int>().swap(dq); for(int j=0;j<cir.size();++j) cir[j].F=dfs2(cir[j].F); if(cir.size()>1) { int n=cir.size(); sum=0,dq.pb(0); for(int j=0;j<n;++j) cir.pb(cir[j]); for(int j=1;j<cir.size();++j) { while(dq.size()&&j-dq[0]>=n) dq.pop_front(); sum+=cir[j-1].S,M=max(M,sum+cir[j].F+cir[dq[0]].F); cir[j].F-=sum; while(dq.size()&&cir[j].F>=cir[dq.back()].F) dq.pop_back(); dq.pb(j); } } ans+=M; } cout << ans << "\n"; }

Compilation message (stderr)

islands.cpp: In function 'bool dfs(int, int)':
islands.cpp:29:5: warning: suggest explicit braces to avoid ambiguous 'else' [-Wdangling-else]
   if(i!=f)
     ^
islands.cpp:36:4: warning: suggest explicit braces to avoid ambiguous 'else' [-Wdangling-else]
  if(flag)
    ^
islands.cpp: In function 'int main()':
islands.cpp:74:17: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
    for(int j=0;j<cir.size();++j)
                ~^~~~~~~~~~~
islands.cpp:82:18: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
     for(int j=1;j<cir.size();++j)
                 ~^~~~~~~~~~~
#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...