Submission #488816

# Submission time Handle Problem Language Result Execution time Memory
488816 2021-11-20T14:44:06 Z cfalas Dynamic Diameter (CEOI19_diameter) C++14
0 / 100
5000 ms 31600 KB
#include<bits/stdc++.h>
using namespace std;
#define mp make_pair
#define INF 10000000
#define MOD 1000000007
#define MID ((l+r)/2)
#define HASHMOD 2305843009213693951
#define ll long long
#define ull unsigned long long
#define F first
#define S second
typedef pair<ll, ll> ii;
typedef pair<ii, ll> iii;
typedef vector<ll> vi;
typedef vector<ii> vii;
typedef map<int, int> mii;

#define EPS 1e-6
#define FOR(i,n) for(int i=0;i<((int)(n));i++)
#define FORi(i,a,b) for(int i=((int)(a));i<((int)(b));i++)
#define FOA(v, a) for(auto v : a)

int t, n;
vi a, b;

vector<vii> adj;

ii f;

int cnt=0;
vector<int> dfso;
void dfs(int s, int p=-1, ll d=0){
	dfso[s] = cnt++;
	if(d>f.F) f = max(f, {d, s});
	FOA(v, adj[s]){
		if(v.F!=p) dfs(v.F, s, d+v.S);
	}
}

vector<int> pr;

struct node{
	ii l1={0,0}, l2={0,0};
	int w=0;
	int id=1;
	vector<node*> c;
	vector<node*> all_c;

	void build(int p=-1){
		pr.push_back(id);
		FOA(v,adj[id]){
			if(v.F!=p){
				c.push_back(new node());
				c[c.size()-1]->w = v.S;
				c[c.size()-1]->id = v.F;
				c[c.size()-1]->build(id);
			}
		}
		FOA(v, c){
			if(v->w + v->l1.F > l1.F) l2 = l1, l1 = {v->l1.F + v->w, v->id};
			else if(v->w + v->l1.F > l2.F && v->id != l1.S) l2 = {v->l1.F + v->w, v->id};
			//else if(v->w + v->l2 > l2) l2 = v->l2 + v->w;
		}
		//cout<<id<<" ("<<l1.F<<" "<<l1.S<<") ("<<l2.F<<" "<<l2.S<<")"<<endl;
	}

	void update(int s, int t){
		int pos = c.size()-1;
		FOR(i,c.size()-1){
			if(dfso[c[i]->id] <= dfso[s] && dfso[s] < dfso[c[i+1]->id]) pos = i;
		}
		if(s==id){
			//cout<<"CHAINGE "<<s<<endl;
			w = t;
		}
		else{
			c[pos]->update(s, t);
			//node*v = c[pos];
			l1 = {0,0}, l2 = {0,0};
			FOA(v, c){
				if(v->w + v->l1.F > l1.F) l2 = l1, l1 = {v->l1.F + v->w, v->id};
				else if(v->w + v->l1.F > l2.F && v->id != l1.S) l2 = {v->l1.F + v->w, v->id};
				//else if(v->w + v->l2 > l2) l2 = v->l2 + v->w;
			}
			/*
			if(v->id == l1.S) l1.F = v->l1.F + w;
			if(v->w + v->l1.F > l1.F) l2 = l1, l1 = {v->l1.F + v->w, v->id};
			else if(v->w + v->l1.F > l2.F && v->id != l1.S) l2 = {v->l1.F + v->w, v->id};*/
			//cout<<id<<" ("<<l1.F<<" "<<l1.S<<") ("<<l2.F<<" "<<l2.S<<")"<<endl;
		}
	}
};

int main(){
	int q;
	ll w;
	cin>>n>>q>>w;
	adj.assign(n+1, vii());
	dfso.assign(n+1, 0);

	vector<pair<ii,ii> > edg(n-1);
	set<ii> ws;
	vi wu(n);
	FOR(i,n-1){
		ll a, b, c;
		cin>>a>>b>>c;
		ws.insert({-c, i});
		wu[i] = c;
		edg[i] = {{a, adj[a].size()}, {b, adj[b].size()}};
		adj[a].push_back({b,c});
		adj[b].push_back({a,c});
	}
	node root;
	root.build();
	ll last=0;
	dfs(1);
	//FOR(i,n) cout<<dfso[i+1]<<" ";
	//cout<<endl;
	while(q--){
		ll a, b;
		cin>>a>>b;
			//cout<<"UPDATE\n";
		a= (a + last) % (n-1);
		b = (b+last) % w;

		adj[edg[a].F.F][edg[a].F.S].S = b;
		adj[edg[a].S.F][edg[a].S.S].S = b;

		f = {0,1};
		//dfs(1);
		//dfs(f.S);


		root.update(max(ii(dfso[edg[a].F.F], edg[a].F.F),ii(dfso[edg[a].S.F], edg[a].S.F)).S, b);


		//last = f.F;
		last = root.l1.F + root.l2.F;
		cout<<last<<endl;

	}
}
# Verdict Execution time Memory Grader output
1 Incorrect 0 ms 204 KB Output isn't correct
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Incorrect 0 ms 204 KB Output isn't correct
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 0 ms 204 KB Output is correct
2 Correct 1 ms 204 KB Output is correct
3 Correct 4 ms 204 KB Output is correct
4 Correct 35 ms 492 KB Output is correct
5 Correct 171 ms 636 KB Output is correct
6 Correct 0 ms 204 KB Output is correct
7 Correct 1 ms 332 KB Output is correct
8 Correct 1 ms 332 KB Output is correct
9 Correct 7 ms 452 KB Output is correct
10 Correct 63 ms 492 KB Output is correct
11 Correct 304 ms 856 KB Output is correct
12 Correct 6 ms 1612 KB Output is correct
13 Correct 9 ms 1740 KB Output is correct
14 Correct 44 ms 1732 KB Output is correct
15 Correct 394 ms 1808 KB Output is correct
16 Correct 1881 ms 2228 KB Output is correct
17 Correct 151 ms 28460 KB Output is correct
18 Correct 338 ms 28420 KB Output is correct
19 Correct 2444 ms 28572 KB Output is correct
20 Execution timed out 5092 ms 28568 KB Time limit exceeded
21 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Incorrect 4 ms 588 KB Output isn't correct
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Incorrect 2794 ms 31600 KB Output isn't correct
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Incorrect 0 ms 204 KB Output isn't correct
2 Halted 0 ms 0 KB -