#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define int long long
#define pb push_back
const ll N=100100;
vector<pair<ll,ll>> ma[N];
pair<ll,ll> edg[N];
ll dp[N][2],h[N],sz[N],dist[N],par[N],ans=0,wei[N];
void dfs(int x,int p=-1)
{
dp[x][1]=dp[x][0]=0;
for(auto it:ma[x])
{
int y=it.first;
int was=it.second;
if(y==p)continue;
ll w=wei[was];
h[y]=h[x]+w;
par[y]=x;
dfs(y,x);
if(dp[y][0]+w > dp[x][0])
{
dp[x][1]=dp[x][0];
dp[x][0]=dp[y][0]+w;
}
else{
dp[x][1]=max(dp[x][1],dp[y][0]+w);
}
}
ans=max(ans,dp[x][0]+dp[x][1]);
}
int32_t main()
{
ll n,q,w;
cin>>n>>q>>w;
for(int i=0;i<n-1;i++)
{
ll a,b,w;
cin>>a>>b>>w;
wei[i]=w;
edg[i]={a,b};
ma[a].pb({b,i});
ma[b].pb({a,i});
}
h[1]=1;
dfs(1);
ans=0;
while(q--)
{
ll d,nw;
cin>>d>>nw;
d=(d+ans)%(n-1);
nw=(nw+ans)%w;
wei[d]=nw;
ans=0;
dfs(1);
cout<<ans<<endl;
}
}
| # | 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... |