This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#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 time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |