Submission #1197576

#TimeUsernameProblemLanguageResultExecution timeMemory
1197576cbd_6969Jobs (BOI24_jobs)C++20
100 / 100
344 ms105808 KiB
#include<bits/stdc++.h> using namespace std; #define int long long const int N=3e5+5; int n, m, a[N]; vector<int> adj[N]; struct DP:map<int, int>{ void pop(int x){ int cur=-x, last=x; for(map<int, int>::iterator it=begin();it!=end()&&cur<0;it=erase(it)){ if(cur<0){ last=max(last, it->first-cur); } cur+=it->second; } if(cur>0){ (*this)[last]+=cur; } } }dp[N]; void dfs(int u){ for(int v:adj[u]){ dfs(v); if(dp[v].size()>dp[u].size()) swap(dp[u], dp[v]); for(pair<int, int> p:dp[v]){ int x=p.first, y=p.second; dp[u][x]+=y; } } if(a[u]>=0){ dp[u][0]+=a[u]; } else dp[u].pop(-a[u]); } int32_t main(){ ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0); cin>>n>>m; for(int i=1; i<=n; i++){ int p; cin>>a[i]>>p; adj[p].push_back(i); } dfs(0); int ans=0; for(pair<int, int> p:dp[0]){ int x=p.first, y=p.second; if(x<=m){ m+=y; ans+=y; } } cout<<ans; }
#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...