#include<bits/stdc++.h>
using namespace std;
#define int long long
#define inf (int)2e18
#define _ <<' '<<
#define nl '\n'
const int N = 1e5+1;
vector<pair<int,int>> g[N];
int pr[N], pw[N], in[N], out[N], rt[N], mx[4*N], lz[4*N];
int cnt;
void lazy(int l, int r, int p){
mx[p] += lz[p];
if(l != r){
lz[p*2] += lz[p];
lz[p*2+1] += lz[p];
}
lz[p] = 0;
}
void upd(int l, int r, int p, int ql, int qr, int v){
lazy(l, r, p);
if(r < ql or qr < l) return;
if(ql <= l and r <= qr){
lz[p] += v;
lazy(l, r, p);
return;
}
int m = (l+r)/2;
upd(l, m, p*2, ql, qr, v);
upd(m+1, r, p*2+1, ql, qr, v);
mx[p] = max(mx[p*2], mx[p*2+1]);
}
int qry(int l, int r, int p, int ql, int qr){
lazy(l, r, p);
if(r < ql or qr < l) return -inf;
if(ql <= l and r <= qr) return mx[p];
int m = (l+r)/2;
return max(qry(l, m, p*2, ql, qr), qry(m+1, r, p*2+1, ql, qr));
}
int qry(int ql, int qr){
return qry(1, N, 1, ql, qr);
}
void upd(int ql, int qr, int v){
upd(1, N, 1, ql, qr, v);
}
void dfs(int v, int p, int d){
if(p == 1) rt[v] = v;
else rt[v] = rt[p];
in[v] = cnt++;
upd(in[v], in[v], d);
for(auto [ch, w] : g[v]){
if(ch == p) continue;
pr[ch] = v;
pw[ch] = w;
dfs(ch, v, d + w);
}
out[v] = cnt-1;
}
void solve(){
int n, q, m;
cin>>n>>q>>m;
pair<int,int> inp[n-1];
for(int i = 0; i < n-1; i++){
int a, b, c;
cin>>a>>b>>c;
inp[i] = {a, b};
g[a].push_back({b, c});
g[b].push_back({a, c});
}
dfs(1, 0, 0);
multiset<int> st;
for(auto [ch, w] : g[1]){
st.insert(qry(in[ch], out[ch]));
}
int ans = 0;
while(q--){
int i, x;
cin>>i>>x;
i = (i + ans) % (n-1);
x = (x + ans) % m;
auto [a, b] = inp[i];
if(pr[a] == b) swap(a, b);
int r = rt[b];
st.erase(st.find(qry(in[r], out[r])));
upd(in[b], out[b], x - pw[b]);
pw[b] = x;
st.insert(qry(in[r], out[r]));
ans = *st.rbegin() + (st.size() > 1 ? *prev(prev(st.end())) : 0);
cout<<ans<<nl;
}
}
signed main(){
ios_base::sync_with_stdio(0);
cin.tie(NULL);cout.tie(NULL);
int t = 1;
//cin>>t;
while(t--) solve();
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... |