#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define pb push_back
#define ff first
#define ss second
#define all(s) s.begin(),s.end()
#define rall(s) s.rbegin(),s.rend()
const ll N=1e5+5,Q=1e5+5;
ll n,q,W;
ll a[N],b[N],c[N];
ll mx=-1,node;
vector<ll>g[N];
void dfs(ll x,ll p,ll d){
	if(d>mx){
		mx=d;
		node=x;
	}
	for(ll i:g[x]){
		ll y=(a[i]==x?b[i]:a[i]),w=c[i];
		if(y!=p){
			dfs(y,x,d+w);
		}
	}
}
int main(){
	ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0);
	cin>>n>>q>>W;
	multiset<ll,greater<ll>>edge;
	for(ll i=0;i<n-1;i++){
		cin>>a[i]>>b[i]>>c[i];
		g[a[i]].pb(i);
		g[b[i]].pb(i);
		edge.insert(c[i]);
	}
	ll last=0;
	while(q--){
		ll d,e;
		cin>>d>>e;
		d=(d+last)%(n-1);
		e=(e+last)%W;
		edge.erase(edge.find(c[d]));
		c[d]=e;
		edge.insert(c[d]);
		if(n==2){
			last=c[0];
			cout<<last<<"\n";
		}
		else{
			last=*edge.begin()+*next(edge.begin());
			cout<<last<<"\n";
		}
		// mx=-1;
		// dfs(1,1,0);
		// mx=-1,
		// dfs(node,node,0);
		// last=mx;
		// cout<<last<<"\n";
	}
}
| # | 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... |