Submission #598585

#TimeUsernameProblemLanguageResultExecution timeMemory
598585Valaki2Magic Tree (CEOI19_magictree)C++14
34 / 100
2078 ms24768 KiB
#include <bits/stdc++.h> using namespace std; #define int long long #define pb push_back const int maxn = 1e5; struct fruit { int vertex, day, weight; fruit() : vertex(0), day(0), weight(0) {} fruit(int vertex_, int day_, int weight_) : vertex(vertex_), day(day_), weight(weight_) {} }; int n, m, k; int par[maxn + 1]; vector<int> children[maxn + 1]; bool has_fruit[maxn + 1]; fruit fruit_of[maxn + 1]; vector<fruit> fruits; int dp[maxn + 1]; set<int> days; void dfs(int cur, int &d) { int sum = 0; for(int nei : children[cur]) { dfs(nei, d); sum += dp[nei]; } if(has_fruit[cur] && fruit_of[cur].day == d) { sum += fruit_of[cur].weight; } dp[cur] = max(dp[cur], sum); } void solve() { cin >> n >> m >> k; for(int i = 2; i <= n; i++) { cin >> par[i]; children[par[i]].pb(i); } fruits.assign(m, fruit()); for(int i = 0; i < m; i++) { cin >> fruits[i].vertex >> fruits[i].day >> fruits[i].weight; has_fruit[fruits[i].vertex] = true; days.insert(fruits[i].day); fruit_of[fruits[i].vertex] = fruits[i]; } for(int d : days) { dfs(1, d); } cout << dp[1] << "\n"; } signed main() { ios_base::sync_with_stdio(false); cin.tie(nullptr); 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...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...