제출 #1214766

#제출 시각아이디문제언어결과실행 시간메모리
1214766madamadam3트리 (IOI24_tree)C++20
0 / 100
2095 ms27296 KiB
#include <bits/stdc++.h> #include "tree.h" using namespace std; using vi = vector<int>; using vvi = vector<vi>; typedef long long ll; #define sz(x) int((x).size()) #define all(x) (x).begin(), (x).end() #define pb push_back #define each(a, x) for (auto &a : x) #define FOR(i, a, b) for (int i = a; i < b; i++) int n, l, r; vi par, weight; vvi adj; int dfs(int u, int p, int &total_cost) { if (sz(adj[u]) == 1) { total_cost += l * weight[u]; return l; } int child_sum = 0; each(v, adj[u]) { if (v == p) continue; child_sum += dfs(v, u, total_cost); } int my_sum = 0; if (par[u] == -1 || weight[par[u]] <= weight[u]) { my_sum = r - child_sum; } else { my_sum = l - child_sum; } total_cost += abs(my_sum) * weight[u]; return child_sum + my_sum; } void init(vi P, vi W) { par = P; weight = W; n = sz(par); adj.assign(n, vi()); FOR(i, 1, n) { adj[i].pb(par[i]); adj[par[i]].pb(i); } } ll query(int L, int R) { l = L; r = R; int total_cost = 0; dfs(0, -1, total_cost); return total_cost; }
#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...