#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define pb push_back
#define pii pair<ll,ll>
#define sz size()
#define all(v) v.begin(),v.end()
#define fi first
#define se second
const int N = 3e5;
const int mod = 1e9+7;
const ll INF = 1e18;
const int di[] = {1, -1, 0, 0};
const int dj[] = {0, 0, 1, -1};
vector<int> g[N+1];
ll val[N+1],p[N+1];
ll dp[N+1];
void dfs(int v,int pr){
	for(auto i: g[v]){
		if(i!=pr){
			dfs(i,v);
			if(dp[i]>0)
				dp[v]+=dp[i];
		}
	}
	if(val[v]>0)
		dp[v]+=val[v];
	else if(dp[v]>val[v])
		dp[v]+=val[v];
}
void solve() {
	ll n,s;
	cin>>n>>s;
	for(int i = 1; i <= n; i++){
		cin>>val[i]>>p[i];
		if(p[i]!=0){
			g[i].pb(p[i]);
			g[p[i]].pb(i);
		}
	}
	ll ans=0;
	for(int i = 1; i <= n; i++){
		if(p[i]==0){
			dfs(i,-1);
			ans+=dp[i];
		}
	}
	cout<<ans<<"\n";
}
int main() {
	//freopen("cowrun.in","r",stdin);
	//freopen("cowrun.out","w",stdout);
    ios_base::sync_with_stdio(false);
    cin.tie(nullptr);
    cout.tie(nullptr);
	int t=1;
	//cin>>t;
	while(t--) {
        solve();
	}
    return 0;
}
| # | 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... |