Submission #1241594

#TimeUsernameProblemLanguageResultExecution timeMemory
1241594alexaaaTree (IOI24_tree)C++20
0 / 100
2096 ms16276 KiB
#include<iostream> #include<vector> #include<algorithm> #include<set> #include<map> #include "tree.h" using namespace std; vector<int> w; vector<pair<int,int>> children; vector<vector<int>> adj_list; int n; void init(std::vector<int> P, std::vector<int> W){ swap(W,w); n = P.size(); adj_list.assign(P.size(),{}); for(int i = 0; i < P.size(); i ++){ if(P[i] != -1){ adj_list[P[i]].push_back(i); } } for(int i = 0; i < P.size(); i++){ children.push_back({adj_list[i].size(),i}); } sort(children.begin(),children.end()); } long long query(int L, int R){ long long answer = 0; vector<long long> sum(n); for(int i = 0; i < n; i++){ long long total = 0; int u = children[i].second; if(adj_list[u].size() == 0){ answer += (L * w[children[i].second]); sum[children[i].second] = L; } else{ for(int j = 0; j < adj_list[u].size(); j++){ total += sum[adj_list[u][j]]; } if(total < R){ answer += (0*w[children[i].second]); sum[children[i].second] = total; } else{ int diff = R - total; cout << diff << '\n'; answer += (abs(diff)*w[children[i].second]); sum[children[i].second] = total + diff; cout << children[i].second <<" " <<total + diff << '\n'; } } } return answer; }
#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...