Submission #1299764

#TimeUsernameProblemLanguageResultExecution timeMemory
1299764KindaGoodGamesJobs (BOI24_jobs)C++20
14 / 100
2094 ms21392 KiB
#include<bits/stdc++.h> using namespace std; #define int long long #define pii pair<int,int> #define tiii tuple<int,int,int> int mod = 1e9+7; vector<vector<int>> adj; vector<int>val; vector<bool> taken; void DFS(int v,int p, int cur, int limit, pii& best){ cur += val[v]; if(cur < -limit){ return; } best = max(best,{cur,v}); int s = 0; for(auto u : adj[v]){ DFS(u,v,cur,limit,best); } } int32_t main(){ int n, s; cin >> n >> s; int os = s; adj.resize(n); val.resize(n); taken.resize(n); vector<int> par(n,-1); vector<int> roots; for(int i = 0; i < n; i++){ cin >> val[i]; int p; cin >> p; p--; par[i] = p; if(p != -1){ adj[p].push_back(i); }else{ roots.push_back(i); } } int left = n; while(true){ pii best = {-1e9,-1e9}; for(auto r : roots){ DFS(r,r,0,s,best); } if(best.first <= 0) break; int v = best.second; s += best.first; while(v != -1){ taken[v] = true; val[v] = 0; v = par[v]; } } cout << s-os << "\n"; }
#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...