#include<bits/stdc++.h>
#define f first
#define s second
using namespace std;
const int N=1e6+5;
long long mx,h,ans1,dm[N],n,m,a[N],b[N],fix[N],sz,mx1,c,k,u,ans,v;
vector<pair<int,long long> >V[N],cycle;
void dfs(int u,int p,long long h,int S){
if(!fix[u])fix[u]=1;
if(h>mx) {
mx=h; c=u;
}
for(int i=0;i<V[u].size();i++){
if((fix[V[u][i].f]!=2 || V[u][i].f==S) && V[u][i].f!=p){
dfs(V[u][i].f,u,h+V[u][i].s,S);
}
}
}
void diameter(int u){
mx=0;
dfs(u,0,0,u);dm[u]=mx;
dfs(c,0,0,u);
ans1=max(ans1,mx);
}
int main(){
ios_base::sync_with_stdio(false),cin.tie(0),cout.tie(0);
cin>>n;
for(k=1;k<=n;k++){
cin>>a[k]>>b[k];
V[a[k]].push_back({k,b[k]});
V[k].push_back({a[k],b[k]});
}
for(k=1;k<=n;k++){
if(!fix[k]){
u=k;
ans1=0; sz=0; cycle.clear();
while(!fix[u]){
fix[u]=1;
u=a[u];
}
while(fix[u]!=2){
fix[u]=2;
u=a[u];
cycle.push_back({u,b[u]});
sz+=b[u];
}
for(int i=0;i<cycle.size();i++){
diameter(cycle[i].f);
}
mx=mx1=dm[cycle[0].f]; ans1=max(ans1,sz-cycle[0].s);
long long bef=cycle[0].s;
for(int i=1;i<cycle.size();i++){
ans1=max(ans1,bef+mx+dm[cycle[i].f]);
ans1=max(ans1,sz+mx1-bef+dm[cycle[i].f]);
mx=max(mx,dm[cycle[i].f]-bef);
mx1=max(mx1,dm[cycle[i].f]+bef);
bef+=cycle[i].s;
}
ans+=ans1;
}
}
cout<<ans;
}
Compilation message
islands.cpp: In function 'void dfs(int, int, long long int, int)':
islands.cpp:13:15: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::pair<int, long long int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
13 | for(int i=0;i<V[u].size();i++){
| ~^~~~~~~~~~~~
islands.cpp: In function 'int main()':
islands.cpp:47:17: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::pair<int, long long int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
47 | for(int i=0;i<cycle.size();i++){
| ~^~~~~~~~~~~~~
islands.cpp:52:17: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::pair<int, long long int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
52 | for(int i=1;i<cycle.size();i++){
| ~^~~~~~~~~~~~~
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
15 ms |
23788 KB |
Output is correct |
2 |
Correct |
15 ms |
23916 KB |
Output is correct |
3 |
Correct |
15 ms |
23916 KB |
Output is correct |
4 |
Correct |
15 ms |
23788 KB |
Output is correct |
5 |
Correct |
15 ms |
23788 KB |
Output is correct |
6 |
Correct |
15 ms |
23788 KB |
Output is correct |
7 |
Correct |
15 ms |
23788 KB |
Output is correct |
8 |
Correct |
15 ms |
23788 KB |
Output is correct |
9 |
Correct |
15 ms |
23848 KB |
Output is correct |
10 |
Correct |
15 ms |
23916 KB |
Output is correct |
11 |
Correct |
15 ms |
23916 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
15 ms |
23916 KB |
Output is correct |
2 |
Correct |
16 ms |
24044 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
17 ms |
24172 KB |
Output is correct |
2 |
Correct |
17 ms |
24300 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
34 ms |
25196 KB |
Output is correct |
2 |
Correct |
32 ms |
27240 KB |
Output is correct |
3 |
Incorrect |
26 ms |
25728 KB |
Output isn't correct |
4 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
37 ms |
28520 KB |
Output is correct |
2 |
Correct |
51 ms |
32612 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
94 ms |
40676 KB |
Output is correct |
2 |
Execution timed out |
2077 ms |
43116 KB |
Time limit exceeded |
3 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
154 ms |
56940 KB |
Output is correct |
2 |
Correct |
190 ms |
68932 KB |
Output is correct |
3 |
Execution timed out |
2084 ms |
72404 KB |
Time limit exceeded |
4 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
341 ms |
94260 KB |
Output is correct |
2 |
Correct |
764 ms |
115916 KB |
Output is correct |
3 |
Correct |
299 ms |
90732 KB |
Output is correct |
4 |
Correct |
373 ms |
112076 KB |
Output is correct |
5 |
Correct |
366 ms |
112584 KB |
Output is correct |
6 |
Incorrect |
1268 ms |
99816 KB |
Output isn't correct |
7 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Runtime error |
392 ms |
131076 KB |
Execution killed with signal 9 (could be triggered by violating memory limits) |
2 |
Halted |
0 ms |
0 KB |
- |