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;
#define int long long
#define ld long double
#define show(x,y) cout << y << " " << #x << endl;
#define show2(x,y,i,j) cout << y << " " << #x << " " << j << " " << #i << endl;
#define show3(x,y,i,j,p,q) cout << y << " " << #x << " " << j << " " << #i << " " << q << " " << #p << endl;
#define show4(x,y) for(auto it:y) cout << it << " "; cout << #x << endl;
typedef pair<int,int>pii;
typedef pair<int,pii>pi2;
vector<int>adj[300005];
int arr[300005];
multiset<pii>se[300005];
void dfs(int index){
for(auto it:adj[index]){
dfs(it);
for(auto ii:se[it]) se[index].insert(ii);
}
if(arr[index]>=0){
//req decrease, profit increase
int counter=arr[index];
while(!se[index].empty()&&se[index].begin()->first<=counter){
counter+=se[index].begin()->second;
se[index].erase(se[index].begin());
}
multiset<pii>nxt;
for(auto it:se[index]){
nxt.insert({max(0LL,it.first-arr[index]),it.second});
}
se[index]=nxt;
se[index].insert({0,counter});
}
else{
//req increase, profit decrease
multiset<pii>nxt;
for(auto it:se[index]){
if(it.second+arr[index]<=0) continue;
nxt.insert({it.first-arr[index],it.second+arr[index]});
}
se[index]=nxt;
}
//show(index,index);
//for(auto it:se[index]){
//cout << it.first << " " << it.second << endl;
//}
}
void solve(){
int n,m;
cin >> n >> m;
int temp,temp2;
for(int x=1;x<=n;x++){
cin >> temp >> temp2;
arr[x]=temp;
adj[temp2].push_back(x);
}
arr[0]=m;
dfs(0);
int ans=0;
while(!se[0].empty()&&se[0].begin()->first==0){
ans+=se[0].begin()->second;
se[0].erase(se[0].begin());
}
cout << ans-m;
}
int32_t main(){
ios::sync_with_stdio(0);
cin.tie(0);
int t=1;
//cin >> t;
//freopen("in.txt","r",stdin);
while(t--){
solve();
}
}
# | 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... |