#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 time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |