Submission #91712

#TimeUsernameProblemLanguageResultExecution timeMemory
91712easruiIslands (IOI08_islands)C++14
34 / 100
2079 ms132096 KiB
#include <bits/stdc++.h> using namespace std; const int MAX = 1e6+5; struct Edge{ int i,x; long long d; Edge(){}; Edge(int a, int b, long long c){i=a;x=b;d=c;}; }; int N; long long D[MAX],Len,Ans; bool vE[MAX],vN[MAX],isL[MAX]; vector<Edge> I[MAX]; stack<int> L; vector<int> Lp; void DFS(int i) { if(vN[i]){ Lp.push_back(i); isL[i] = true; while(L.top()!=i){ Lp.push_back(L.top()); isL[L.top()] = true; L.pop(); } return; } vN[i] = true; L.push(i); for(auto it : I[i]){ if(vE[it.i]) continue; vE[it.i] = true; DFS(it.x); } if(!L.empty()) L.pop(); } void getD(int i, int x, long long d, int r) { if(isL[x]) return; for(auto it : I[x]){ if(it.x==r) continue; getD(i,it.x,it.d+d,x); } D[i] = max(D[i],d); } void getL(int i, int x, long long d, int r) { if(x==i) return; if(!isL[x]) return; for(auto it : I[x]){ if(it.x==r) continue; getL(i,it.x,it.d+d,x); } Len = max(Len,d+D[x]+D[i]); } int main() { cin >> N; for(int i=1; i<=N; i++){ int x; long long d; cin >> x >> d; I[i].push_back(Edge(i,x,d)); I[x].push_back(Edge(i,i,d)); } for(int j=1; j<=N; j++){ if(vN[j]) continue; Lp.clear(); Len = 0; DFS(j); for(int i=0; i<Lp.size(); i++){ int x = Lp[i]; for(auto it : I[x]) getD(x,it.x,it.d,x); } for(int i=0; i<Lp.size(); i++){ int x = Lp[i]; for(auto it : I[x]) getL(x,it.x,it.d,x); } Ans += Len; } cout << Ans; }

Compilation message (stderr)

islands.cpp: In function 'int main()':
islands.cpp:75:23: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
         for(int i=0; i<Lp.size(); i++){
                      ~^~~~~~~~~~
islands.cpp:79:23: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
         for(int i=0; i<Lp.size(); 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...