106592024-04-07 19:12:57111XORfa visszatércpp17Runtime error 28/1001.57s164308 KiB
#include<bits/stdc++.h>
using namespace std;

#define int long long

struct Trie{
	vector<array<int,2>>t;
	vector<int>c;
	vector<set<int>>v;
	
	Trie():t(1),c(1),v(1){
	}
	
	void add(int n,int x){
		int y=0;
		for(int i=30;i>=0;i--){
			int b=x>>i&1;
			if(t[y][b]==0){
				t[y][b]=t.size();
				t.emplace_back();
				c.emplace_back();
				v.emplace_back();
			}
			y=t[y][b];
			c[y]++;
		}
		v[y].insert(n);
	}
	
	void rem(int n,int x){
		int y=0;
		for(int i=30;i>=0;i--){
			int b=x>>i&1;
			y=t[y][b];
			c[y]--;
		}
		v[y].erase(n);
	}
	
	int get(int x){
		int y=0;
		for(int i=30;i>=0;i--){
			int b=x>>i&1;
			if(c[t[y][b^1]]){
				y=t[y][b^1];
			}
			else{
				y=t[y][b];
			}
		}
		return *v[y].begin();
	}
};

signed main(){
	ios::sync_with_stdio(false);
	cin.tie(nullptr);
	int N,Q;
	cin>>N>>Q;
	vector<vector<pair<int,int>>>g(N+1);
	for(int i=0;i<N-1;i++){
		int a,b,w;
		cin>>a>>b>>w;
		g[a].emplace_back(b,w);
		g[b].emplace_back(a,w);
	}
	vector<int>v(N+1);
	auto dfs=[&](auto self,int i,int p,int x)->void{
		v[i]=x;
		for(auto[j,w]:g[i]){
			if(j==p){
				continue;
			}
			self(self,j,i,x^w);
		}
	};
	dfs(dfs,1,0,0);
	set<int>s;
	Trie t;
	vector<set<int>>p(N+1);
	multimap<int,pair<int,int>>ans;
	ans.emplace(0,pair<int,int>{0,0});
	while(Q--){
		int x;
		cin>>x;
		if(s.count(x)){
			s.erase(x);
			t.rem(x,v[x]);
			for(int y:p[x]){
				p[y].erase(x);
			}
			p[x].clear();
		}
		else{
			if(!s.empty()){
				int y=t.get(v[x]);
				if(!p[x].count(y)){
					ans.emplace(v[x]^v[y],pair<int,int>{x,y});
					p[x].insert(y);
					p[y].insert(x);
				}
			}
			s.insert(x);
			t.add(x,v[x]);
		}
		while((--ans.end())->first!=0&&(!s.count((--ans.end())->second.first)||!s.count((--ans.end())->second.second))){
			auto[x,y]=(--ans.end())->second;
			ans.erase(--ans.end());
			if(s.size()>1){
				if(s.count(x)){
					int z=t.get(v[x]);
					if(!p[x].count(z)){
						ans.emplace(v[x]^v[z],pair<int,int>{x,z});
						p[x].insert(z);
						p[z].insert(x);
					}
				}
				if(s.count(y)){
					int z=t.get(v[y]);
					if(!p[y].count(z)){
						ans.emplace(v[y]^v[z],pair<int,int>{y,z});
						p[y].insert(z);
						p[z].insert(y);
					}
				}
			}
		}
		// for(auto[i,_]:ans)cout<<i<<' ';cout<<endl;
		cout<<(--ans.end())->first<<'\n';
	}
	return 0;
}
SubtaskSumTestVerdictTimeMemory
subtask10/0
1Accepted3ms1900 KiB
2Accepted3ms2096 KiB
subtask211/11
3Accepted3ms2456 KiB
4Accepted3ms2708 KiB
5Accepted3ms2716 KiB
6Accepted3ms2932 KiB
7Accepted3ms2948 KiB
8Accepted3ms2892 KiB
9Accepted3ms3144 KiB
10Accepted3ms2852 KiB
11Accepted3ms2856 KiB
12Accepted3ms3108 KiB
13Accepted3ms3060 KiB
subtask30/13
14Runtime error30ms16248 KiB
15Runtime error29ms16544 KiB
16Runtime error29ms16548 KiB
17Accepted148ms31588 KiB
18Accepted153ms36772 KiB
19Accepted173ms38768 KiB
20Accepted141ms27732 KiB
21Runtime error29ms16864 KiB
22Runtime error29ms16696 KiB
23Runtime error29ms16968 KiB
subtask417/17
24Accepted6ms6496 KiB
25Accepted4ms6496 KiB
26Accepted6ms6880 KiB
27Accepted7ms8900 KiB
28Accepted7ms8908 KiB
29Accepted4ms6760 KiB
30Accepted6ms6988 KiB
31Accepted4ms7088 KiB
32Accepted24ms5324 KiB
33Accepted24ms5368 KiB
34Accepted24ms5264 KiB
35Accepted24ms5260 KiB
subtask50/59
36Accepted212ms96476 KiB
37Accepted182ms86928 KiB
38Accepted270ms162604 KiB
39Accepted360ms163696 KiB
40Accepted307ms164308 KiB
41Accepted209ms95520 KiB
42Accepted210ms96028 KiB
43Accepted211ms95516 KiB
44Accepted241ms95460 KiB
45Accepted146ms86920 KiB
46Time limit exceeded1.565s21860 KiB
47Time limit exceeded1.559s21796 KiB
48Time limit exceeded1.567s21752 KiB
49Time limit exceeded1.57s21712 KiB