#include <iostream>
#include <vector>
#include <queue>
using namespace std;
typedef long long int ll;
typedef pair<ll,ll> pll;
/*
#include <fstream>
ifstream in("input.txt");
ofstream out("output.txt");
#define cin in
#define cout out
*/
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;
ll VAL(int k){
V[k]=true;
ll a=0;
for(pll f:grafo[k])
if(!V[f.first] and !C[f.first])
a=max(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 |
23928 KB |
Output isn't correct |
3 |
Correct |
22 ms |
23928 KB |
Output is correct |
4 |
Correct |
23 ms |
23800 KB |
Output is correct |
5 |
Correct |
22 ms |
23800 KB |
Output is correct |
6 |
Correct |
21 ms |
23800 KB |
Output is correct |
7 |
Correct |
22 ms |
23800 KB |
Output is correct |
8 |
Correct |
23 ms |
23800 KB |
Output is correct |
9 |
Correct |
22 ms |
23800 KB |
Output is correct |
10 |
Incorrect |
22 ms |
23804 KB |
Output isn't correct |
11 |
Correct |
22 ms |
23848 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
20 ms |
24056 KB |
Output is correct |
2 |
Correct |
22 ms |
24316 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
24 ms |
24060 KB |
Output is correct |
2 |
Correct |
28 ms |
24696 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
38 ms |
25596 KB |
Output is correct |
2 |
Correct |
64 ms |
30492 KB |
Output is correct |
3 |
Correct |
44 ms |
25768 KB |
Output is correct |
4 |
Incorrect |
32 ms |
24916 KB |
Output isn't correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
72 ms |
32116 KB |
Output is correct |
2 |
Correct |
114 ms |
36592 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
218 ms |
43508 KB |
Output is correct |
2 |
Correct |
225 ms |
58836 KB |
Output is correct |
3 |
Correct |
285 ms |
78024 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
382 ms |
57716 KB |
Output is correct |
2 |
Correct |
459 ms |
111104 KB |
Output is correct |
3 |
Correct |
553 ms |
129576 KB |
Output is correct |
4 |
Runtime error |
654 ms |
132096 KB |
Execution killed with signal 9 (could be triggered by violating memory limits) |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Incorrect |
826 ms |
88008 KB |
Output isn't correct |
2 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Runtime error |
1100 ms |
132096 KB |
Execution killed with signal 9 (could be triggered by violating memory limits) |
2 |
Halted |
0 ms |
0 KB |
- |