Submission #1236041

#TimeUsernameProblemLanguageResultExecution timeMemory
1236041kaltspielerhyMagic Tree (CEOI19_magictree)C++20
0 / 100
491 ms1114112 KiB
#include <bits/stdc++.h> using namespace std; #define int long long const int INFINI = 1e18; vector<vector<int>> recolte; vector<vector<int>> recolteTotale; vector<int> parents; vector<pair<int, int>> fruits; vector<vector<int>> inverse; vector<int> result; int N, M, K; signed main() { ios::sync_with_stdio(false); cin.tie(0); cin >> N >> M >> K; recolte.assign(N+1, vector<int>(K+1, 0)); recolteTotale.assign(N+1, vector<int>(K+1, 0)); parents.assign(N+1, -1); fruits.assign(N+1, {-1, -1}); inverse.assign(N+1, vector<int>()); result.assign(N+1, -1); for (int iArete = 2; iArete <= N; iArete++) { cin >> parents[iArete]; inverse[parents[iArete]].push_back(iArete); } for (int iFruit = 1; iFruit <= M; iFruit++) { int noeud, jour, jus; cin >> noeud >> jour >> jus; fruits[noeud] = {jour, jus}; } queue<int> bfs; vector<int> nbEnfants(N+1); for (int i = 1; i <= N; i++) { nbEnfants[i] = inverse[i].size(); if (inverse[i].size() == 0) bfs.push(i); } while (!bfs.empty()) { int noeud = bfs.front(); bfs.pop(); if (fruits[noeud] != (pair<int, int>){-1, -1}) { int sumAct = 0; recolteTotale[noeud][fruits[noeud].first] += fruits[noeud].second; for (int i = K; i >= fruits[noeud].first; i--) { sumAct += recolte[noeud][i]; } if (recolteTotale[noeud][fruits[noeud].first] > sumAct) { for (int i = K; i > fruits[noeud].first; i--) { recolte[noeud][i] = 0; } recolte[noeud][fruits[noeud].first] = recolteTotale[noeud][fruits[noeud].first]; } } for (int iJour = 1; iJour <= K; iJour++) { recolteTotale[parents[noeud]][iJour] += recolteTotale[noeud][iJour]; recolte[parents[noeud]][iJour] += recolte[noeud][iJour]; } nbEnfants[parents[noeud]]--; if (nbEnfants[parents[noeud]] == 0 && parents[noeud] != 1) bfs.push(parents[noeud]); } int resFinal = 0; for (int iRec : recolte[1]) { // cerr << iVoisin; resFinal += iRec; } cout << resFinal << '\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...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...