#include <iostream>
#include <vector>
#include <queue>
using namespace std;
typedef long long int ll;
typedef pair<ll,ll> pll;
ll N;
ll x,y;
vector<pll> grafo[1000005];
ll F[1000005];
ll H[1000005];
ll W[1000005];
bool V[1000005];
bool C[1000005];
ll res,ans;
ll s,c,l,r;
priority_queue<pll> PQ;
int VAL(int k){
V[k]=true;
ll a=0;
for(pll f:grafo[k])
if(!V[f.first] and !C[f.first])
a+=f.second+VAL(f.first);
return a;
}
void DFS(int k, int g){
if(k==x)
if(c++>1)
return;
ll p=H[k];
while(PQ.top().second+l<=r)
PQ.pop();
ll d=PQ.top().first;
res=max(res,s+p+d);
PQ.push({p-s,r});
r++;
for(pll f:grafo[k])
if(C[f.first] and f.first!=g){
s+=f.second;
//cout<<"DFS "<<k<<" "<<s<<" "<<p<<" "<<d<<" "<<c<<endl;
DFS(f.first,k);
return;
}
}
int main(){
cin>>N;
for(int i=0;i<N;i++){
cin>>x>>y;
x--;
F[i]=x;
W[i]=y;
grafo[i].push_back({x,y});
grafo[x].push_back({i,y});
}
for(int i=0;i<N;i++)
if(!V[i]){
x=y=i;
l=0;
do{
x=F[x];
y=F[F[y]];
}while(x!=y);
do{
l++;
C[x]=true;
x=F[x];
}while(x!=y);
do{
H[x]=VAL(x);
x=F[x];
}while(x!=y);
r=0;
s=0;
c=0;
res=0;
while(!PQ.empty())
PQ.pop();
PQ.push({-1e18,1e18});
if(l==2)
res=max(W[x],W[F[x]])+H[x]+H[F[x]];
else
DFS(x,-1);
ans+=res;
}
cout<<ans;
}
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
22 ms |
23800 KB |
Output is correct |
2 |
Incorrect |
22 ms |
23800 KB |
Output isn't correct |
3 |
Correct |
22 ms |
23928 KB |
Output is correct |
4 |
Correct |
21 ms |
23800 KB |
Output is correct |
5 |
Correct |
22 ms |
23872 KB |
Output is correct |
6 |
Correct |
23 ms |
23800 KB |
Output is correct |
7 |
Correct |
22 ms |
23872 KB |
Output is correct |
8 |
Incorrect |
22 ms |
23928 KB |
Output isn't correct |
9 |
Correct |
22 ms |
23800 KB |
Output is correct |
10 |
Incorrect |
22 ms |
23928 KB |
Output isn't correct |
11 |
Correct |
22 ms |
24056 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Incorrect |
23 ms |
24056 KB |
Output isn't correct |
2 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Incorrect |
25 ms |
24056 KB |
Output isn't correct |
2 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Incorrect |
39 ms |
25692 KB |
Output isn't correct |
2 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Incorrect |
76 ms |
32216 KB |
Output isn't correct |
2 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Incorrect |
216 ms |
43596 KB |
Output isn't correct |
2 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Incorrect |
401 ms |
57812 KB |
Output isn't correct |
2 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Incorrect |
875 ms |
87860 KB |
Output isn't correct |
2 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Runtime error |
949 ms |
132096 KB |
Execution killed with signal 9 (could be triggered by violating memory limits) |
2 |
Halted |
0 ms |
0 KB |
- |