제출 #1305240

#제출 시각아이디문제언어결과실행 시간메모리
1305240vtnooDynamic Diameter (CEOI19_diameter)C++20
7 / 100
302 ms21596 KiB
#include <bits/stdc++.h> #define pb push_back #define fst first #define snd second #define fore(i,a,b) for(int i=a,pao=b;i<pao;++i) #define SZ(x) ((int)x.size()) #define ALL(x) x.begin(),x.end() #define mset(a,v) memset((a),(v),sizeof(a)) #define FIN ios::sync_with_stdio(0);cin.tie(0);cout.tie(0) using namespace std; typedef long long ll; #define int long long const int MAXN=1e5+9; const ll INF=1e18; int tim=0,n,in[MAXN],out[MAXN],z[MAXN],up[MAXN],ew[MAXN]; vector<tuple<int,int,int>>adj[MAXN]; int st[MAXN*4],lz[MAXN*4]; void apply(int v,ll x){ st[v]+=x; lz[v]+=x; } void push(int v){ apply(v*2,lz[v]); apply(v*2+1,lz[v]); lz[v]=0; } void upd(int ts,int te,int x,int v=1,int s=0,int e=n-1){ if(e<ts||te<s)return; if(ts<=s&&e<=te){ apply(v,x); return; }else{ push(v); int m=(s+e)/2; upd(ts,te,x,v*2,s,m); upd(ts,te,x,v*2+1,m+1,e); st[v]=max(st[v*2],st[v*2+1]); } } int que(int ts,int te,int v=1,int s=0,int e=n-1){ if(e<ts||te<s)return 0; if(ts<=s&&e<=te){ return st[v]; }else{ push(v); int m=(s+e)/2; return max(que(ts,te,v*2,s,m),que(ts,te,v*2+1,m+1,e)); } } void dfs(int u,int p){ in[u]=tim++; for(auto&[v,c,i]:adj[u]){ if(v==p)continue; up[i]=v; //el extremo superior z[v]=c; //valor del nodo dfs(v,u); } out[u]=tim; } signed main(){FIN; int q; ll w; cin>>n>>q>>w; fore(i,0,n-1){ int u,v; ll c; cin>>u>>v>>c; adj[u].pb({v,c,i}); adj[v].pb({u,c,i}); ew[i]=c; } dfs(1,1); fore(i,1,n+1){ upd(in[i],out[i]-1,z[i]); } multiset<int>ms; for(auto&[v,c,i]:adj[1]){ ms.insert(que(in[v],out[v]-1)); } ll last=0; while(q--){ ll d_, e_; cin>>d_>>e_; ll d=(d_+last)%(n-1); ll e=(e_+last)%w; ll diff=e-ew[d]; ms.erase(ms.find(que(in[up[d]],out[up[d]]-1))); ew[d]=e; upd(in[up[d]],out[up[d]]-1,diff); ms.insert(que(in[up[d]],out[up[d]]-1)); ll ans; if(SZ(ms)==1)ans=*ms.begin(); else ans=*prev(ms.end())+*prev(prev(ms.end())); cout<<ans<<endl; last=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...