Submission #1303062

#TimeUsernameProblemLanguageResultExecution timeMemory
1303062MuhammadSaramDynamic Diameter (CEOI19_diameter)C++20
24 / 100
5095 ms20808 KiB
#include <bits/stdc++.h>

using namespace std;

#define int long long
#define endl '\n'

const int M = 1e5 + 1;

int dep[M];
set<pair<int,int>> nei[M];

void dfs(int u,int p=0)
{
	for (auto [i,w]:nei[u])
		if (i!=p)
			dep[i]=dep[u]+w, dfs(i,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]].insert({v[i],w[i]});
		nei[v[i]].insert({u[i],w[i]});
	}
	int ls=0;
	while (q--)
	{
		int i, x;
		cin>>i>>x;
		i=(i+ls)%(n-1), x=(x+ls)%W;
		nei[u[i]].erase({v[i],w[i]});
		nei[v[i]].erase({u[i],w[i]});
		w[i]=x;
		nei[u[i]].insert({v[i],w[i]});
		nei[v[i]].insert({u[i],w[i]});
		dfs(1);
		int u=1;
		for (int i=1;i<=n;i++)
			if (dep[i]>dep[u])u=i;
		dep[u]=0, dfs(u);
		ls=0;
		for (int i=1;i<=n;i++)
			if (dep[i]>ls)ls=dep[i];
		cout<<ls<<endl;
	}
	
	return 0;
}
#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...