#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=-1;
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 |
17 ms |
23788 KB |
Output is correct |
2 |
Correct |
17 ms |
23916 KB |
Output is correct |
3 |
Correct |
17 ms |
23916 KB |
Output is correct |
4 |
Correct |
18 ms |
23788 KB |
Output is correct |
5 |
Correct |
17 ms |
23788 KB |
Output is correct |
6 |
Correct |
17 ms |
23788 KB |
Output is correct |
7 |
Correct |
18 ms |
23916 KB |
Output is correct |
8 |
Correct |
17 ms |
23916 KB |
Output is correct |
9 |
Correct |
17 ms |
23916 KB |
Output is correct |
10 |
Correct |
17 ms |
23916 KB |
Output is correct |
11 |
Correct |
17 ms |
23916 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
18 ms |
23916 KB |
Output is correct |
2 |
Correct |
17 ms |
24044 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
18 ms |
24044 KB |
Output is correct |
2 |
Correct |
19 ms |
24300 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
25 ms |
25452 KB |
Output is correct |
2 |
Correct |
37 ms |
27624 KB |
Output is correct |
3 |
Correct |
28 ms |
25964 KB |
Output is correct |
4 |
Correct |
22 ms |
24812 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
44 ms |
29160 KB |
Output is correct |
2 |
Correct |
57 ms |
33764 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
100 ms |
43108 KB |
Output is correct |
2 |
Correct |
102 ms |
44916 KB |
Output is correct |
3 |
Correct |
128 ms |
51312 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
165 ms |
62352 KB |
Output is correct |
2 |
Correct |
201 ms |
74584 KB |
Output is correct |
3 |
Correct |
221 ms |
80220 KB |
Output is correct |
4 |
Correct |
271 ms |
93396 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
364 ms |
109768 KB |
Output is correct |
2 |
Correct |
796 ms |
131072 KB |
Output is correct |
3 |
Correct |
309 ms |
101332 KB |
Output is correct |
4 |
Correct |
385 ms |
124680 KB |
Output is correct |
5 |
Correct |
386 ms |
124616 KB |
Output is correct |
6 |
Correct |
1191 ms |
114540 KB |
Output is correct |
7 |
Correct |
412 ms |
131072 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Runtime error |
376 ms |
131076 KB |
Execution killed with signal 9 (could be triggered by violating memory limits) |
2 |
Halted |
0 ms |
0 KB |
- |