제출 #1303051

#제출 시각아이디문제언어결과실행 시간메모리
1303051MuhammadSaramDynamic Diameter (CEOI19_diameter)C++20
0 / 100
60 ms15788 KiB
#include <bits/stdc++.h> using namespace std; #define int long long #define endl '\n' const int M = 1e5 + 1; int seg[M*2], lz[M*2], st[M], en[M], dep[M], t; vector<pair<int,int>> nei[M]; void push(int v,int lc,int rc) { seg[lc]+=lz[v], lz[lc]+=lz[v]; seg[rc]+=lz[v], lz[rc]+=lz[v]; lz[v]=0; } void modify(int l,int r,int x,int v=0,int s=0,int e=M) { if (l>=e or r<=s) return; if (l<=s && e<=r) { seg[v]+=x, lz[v]+=x; return; } int mid=(s+e)/2, lc=v+1, rc=v+(mid-s)*2; push(v,lc,rc); modify(l,r,x,lc,s,mid); modify(l,r,x,rc,mid,e); seg[v]=max(seg[lc],seg[rc]); } int get(int l,int r,int v=0,int s=0,int e=M) { if (l>=e or r<=s) return 0; if (l<=s && e<=r) return seg[v]; int mid=(s+e)/2, lc=v+1, rc=v+(mid-s)*2; push(v,lc,rc); return max(get(l,r,lc,s,mid),get(l,r,rc,mid,e)); } set<pair<int,int>> se; multiset<int,greater<int>> wei; void dfs(int u,int p=0) { st[u]=t++; modify(st[u],st[u]+1,dep[u]); for (auto [i,w]:nei[u]) if (i!=p) dep[i]=dep[u]+w, dfs(i,u); en[u]=t; if (p==1) se.insert({t,u}); } signed main() { ios::sync_with_stdio(0); cin.tie(NULL), cout.tie(NULL); int n,q,W; cin>>n>>q>>W; int u[n], v[n], w[n]; for (int i=0;i<n-1;i++) { cin>>u[i]>>v[i]>>w[i]; nei[u[i]].push_back({v[i],w[i]}); nei[v[i]].push_back({u[i],w[i]}); } dfs(1); for (int i=0;i<n;i++) if (st[v[i]]>st[u[i]]) swap(u[i],v[i]); for (auto [i,w]:nei[1]) wei.insert(get(st[i],en[i])+w); int ls=0; while (q--) { int d,e; cin>>d>>e; d=(d+ls)%(n-1), e=(e+ls)%W; auto it=se.upper_bound({st[u[d]],0}); wei.erase(wei.find(get(st[it->second],en[it->second])+dep[it->second])); modify(st[u[d]],en[u[d]],e-w[d]); wei.insert(get(st[it->second],en[it->second])+dep[it->second]); if (wei.size()==1) ls=*wei.begin(); else { auto it=wei.begin(); ls=*it;it++;ls+=*it; } w[d]=e; cout<<ls<<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...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...