제출 #1225810

#제출 시각아이디문제언어결과실행 시간메모리
1225810MuhammadSaramArboras (RMI20_arboras)C++20
0 / 100
28 ms17472 KiB
#include <bits/stdc++.h> using namespace std; #define endl '\n' #define int long long const int M = 1e5 + 1, mod = 1e9 + 7; int par[M],wei[M]; multiset<int> se[M]; vector<int> nei[M]; void dfs(int u) { for (int i:nei[u]) { dfs(i); se[u].insert(wei[i]+(se[i].empty()?0:*se[i].rbegin())); } } signed main() { ios::sync_with_stdio(0); cin.tie(NULL), cout.tie(NULL); int n; cin>>n; for (int i=1;i<n;i++) cin>>par[i],nei[par[i]].push_back(i); for (int i=1;i<n;i++) cin>>wei[i]; dfs(0); int ans=0; for (int i=0;i<n;i++) { if (se[i].size()) ans+=*se[i].rbegin(); if (se[i].size()>1) { auto it=se[i].rbegin();it++; ans+=*it; } } cout<<ans<<endl; int q; cin>>q; while (q--) { int v,d; cin>>v>>d; int v1=v; while (v) { auto it=se[par[v]].find(wei[v]+(se[v].empty()?0:*se[v].rbegin())); v=par[v]; if (se[v].size()) ans-=*se[v].rbegin(); if (se[v].size()>1) { auto it=se[v].rbegin();it++; ans-=*it; } se[v].erase(it); } v=v1; wei[v]+=d; while (v) { se[par[v]].insert(wei[v]+(se[v].empty()?0:*se[v].rbegin())); v=par[v]; if (se[v].size()) ans+=*se[v].rbegin(); if (se[v].size()>1) { auto it=se[v].rbegin();it++; ans+=*it; } } 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...