제출 #1051316

#제출 시각아이디문제언어결과실행 시간메모리
1051316nisanduuJobs (BOI24_jobs)C++14
0 / 100
221 ms40528 KiB
#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 timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...