Submission #1303034

#TimeUsernameProblemLanguageResultExecution timeMemory
1303034Faisal_SaqibDynamic Diameter (CEOI19_diameter)C++20
24 / 100
5093 ms13544 KiB
#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 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...