Submission #898940

#TimeUsernameProblemLanguageResultExecution timeMemory
898940vjudge1Magic Tree (CEOI19_magictree)C++17
6 / 100
52 ms22168 KiB
#include <bits/stdc++.h> #define pb push_back #define f first #define s second #define dbg(x) cout << "reached here " << x << endl; #define ll long long using namespace std; typedef pair<int, int> pii; const int maxn = 2e5+5; int a[maxn]; vector<int> adj[maxn]; map<int, int> sack[maxn]; void merge(int v, int u) { for (auto e: sack[u]) sack[v][e.f] += e.s; } void dfs(int v) { for(auto u: adj[v]) { dfs(u); if(sack[u].size() > sack[v].size()) sack[v].swap(sack[u]); } for (auto u: adj[v]) merge(v, u); if(a[v]) { int h = 0; auto it = sack[v].rbegin(); if(sack[v].size() > 0) if((*it).f > a[v]) h += (*it).s; if(sack[v].size() > 1) { auto it3 = sack[v].rbegin(); it3--; if((*it3).f > a[v]) h += (*it3).s; } if(h <= 1) { auto it2 = sack[v].rbegin(); sack[v][a[v]]++; while((*it2).f > a[v] and it2 != sack[v].rend()) { auto del = sack[v].find((*it2).f); sack[v].erase(del); it2--; } } } } signed main() { ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); int n, m, k; cin >> n >> m >> k; for (int i = 2; i <= n; ++i) { int p; cin >> p; adj[p].pb(i); } for (int i = 1; i <= m; ++i) { int v, d, w; cin >> v >> d >> w; a[v] = d; } dfs(1); int ans = 0; for (auto u: sack[1]) ans += u.s; cout << ans << endl; 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...