제출 #1180902

#제출 시각아이디문제언어결과실행 시간메모리
1180902KK_1729Worst Reporter 4 (JOI21_worst_reporter4)C++20
79 / 100
359 ms116756 KiB
#include <bits/stdc++.h> using namespace std; #define int long long #define FOR(i,a,b) for (int i = (a); i < (b); ++i) #define pb push_back #define all(a) a.begin(), a.end() #define endl "\n" void printVector(vector<int> a){ for (auto x: a) cout << x << " "; cout << endl; } vector<vector<int>> graph; vector<int> C; vector<int> H; vector<map<int, int>> dp; void dfs(int x){ dp[x][0] = C[x]; dp[x][H[x]] = -C[x]; dp[x][H[x]+1] = C[x]; for (int &i: graph[x]){ dfs(i); if (dp[x].size() < dp[i].size()) swap(dp[x], dp[i]); for (auto [a, b]: dp[i]){ dp[x][a] += b; if (dp[x][a] == 0) dp[x].erase(a); } } auto iter = dp[x].find(H[x]); while (iter != dp[x].end()){ if (iter->second > 0) break; int val = iter->second; iter = dp[x].erase(iter);iter--; iter->second += val; } } void solve(){ int n; cin >> n; dp.resize(n+1); graph.resize(n+1); C.resize(n+1); H.resize(n+1); FOR(i,1,n+1){ int a, h, c; cin >> a >> h >> c; if (i > 1) graph[a].pb(i); C[i] = c; H[i] = h; } dfs(1); // printVector(C); cout << dp[1][0] << endl; } int32_t main(){ ios::sync_with_stdio(false);cin.tie(nullptr); int t = 1; // cin >> t; while (t--) solve(); }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...