이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
ll dfs(ll node,vector<vector<ll>>&adj,ll money,ll p,map<ll,ll> &cost){
    ll cr = money;
    cr += cost[node];
    for(auto el:adj[node]){
        if(el!=p){
            cr = max(cr,dfs(el,adj,cr,node,cost));
        }
    }
    return cr;
}
void solve(){
    ll n,s;
    cin>>n>>s;
    vector<vector<ll>> adj(n+10);
    map<ll,ll> cost;
    vector<ll> edges(n+10);
    queue<ll> q;
    for(ll i=0;i<n;i++){
        ll x,p;
        cin>>x>>p;
        cost[i] = x;
        if(p==0){
            q.push(p);
        }else{
            edges[i]++;
            adj[p-1].push_back(i);
        }
    }
    ll ans = s;
    while(!q.empty()){
        ll node = q.front();
        //cout<<node<<endl;
        q.pop();
        ans = max(ans,dfs(node,adj,ans,-1,cost));
    }
    ans = ans - s;
    cout<<ans<<endl;
}
int main()
{
    // freopen("input.txt","r",stdin);
    // freopen("output.txt","w",stdout);
    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... |