제출 #1210807

#제출 시각아이디문제언어결과실행 시간메모리
1210807Aviansh트리 (IOI24_tree)C++20
0 / 100
50 ms14752 KiB
#include "tree.h" #include <bits/stdc++.h> using namespace std; int n; vector<int> p, w; vector<vector<int>>g; long long pos; long long neg; long long lef; void init(vector<int> P, vector<int> W) { p = P; w = W; n = (int)p.size(); g=vector<vector<int>>(n,vector<int>()); for(int i = 1;i<n;i++){ g[p[i]].push_back(i); } lef=0; for(int i = 0;i<n;i++){ if(g[i].size()==0){ lef+=w[i]; } } pos=0; neg=w[0]; for(int i = 1;i<n;i++){ if(w[p[i]]-w[i]<0){ neg+=w[i]-w[p[i]]; } else{ pos+=w[p[i]]-w[i]; } } } long long dfs(int st, int l, int r, long long c[]){ long long belsum = 0; if(g[st].size()==0){ c[st]=l; return l; } for(int i : g[st]){ belsum+=dfs(i,l,r,c); } if(w[st]==1||st==0){ c[st]=0; if(belsum>r){ c[st]=-(belsum-r); belsum+=c[st]; } return belsum; } c[st]=0; if(belsum>l){ c[st]=-(belsum-l); belsum+=c[st]; } return belsum; } long long query(int L, int R) { long long ans = pos*1LL*L-neg*1LL*R; ans+=2LL*lef*L; return ans; }
#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...