106732024-04-07 21:09:24111XORfa visszatércpp17Accepted 100/100402ms83216 KiB
#include<bits/stdc++.h>
using namespace std;

#define int long long

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

int ans[50000];
Trie t;

struct ST{
	int n;
	vector<vector<int>>d;

	ST(int n):n(n),d(n*4){
	}

	void update(int i,int l,int r,int ll,int rr,int xx){
		if(l>rr||r<ll){
			return;
		}
		if(l>=ll&&r<=rr){
			d[i].push_back(xx);
			return;
		}
		update(i*2+1,l,(l+r)/2,ll,rr,xx);
		update(i*2+2,(l+r)/2+1,r,ll,rr,xx);
	}
	
	void query(int i,int l,int r,int b){
		for(int x:d[i]){
			t.add(x);
			b=max(b,t.get(x));
		}
		if(l==r){
			ans[l]=b;
		}
		if(l!=r){
			query(i*2+1,l,(l+r)/2,b);
			query(i*2+2,(l+r)/2+1,r,b);
		}
		for(int x:d[i]){
			t.rem(x);
		}
	}
};

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);
	vector<int>s(N+1,-1);
	ST st(Q);
	for(int i=0;i<Q;i++){
		int x;
		cin>>x;
		if(s[x]==-1){
			s[x]=i;
		}
		else{
			st.update(0,0,Q-1,s[x],i-1,v[x]);
			s[x]=-1;
		}
	}
	for(int x=1;x<=N;x++){
		if(s[x]!=-1){
			st.update(0,0,Q-1,s[x],Q-1,v[x]);
		}
	}
	st.query(0,0,Q-1,0);
	for(int i=0;i<Q;i++){
		cout<<ans[i]<<'\n';
	}
	return 0;
}
SubtaskSumTestVerdictTimeMemory
subtask10/0
1Accepted3ms1828 KiB
2Accepted3ms2064 KiB
subtask211/11
3Accepted3ms2224 KiB
4Accepted3ms2476 KiB
5Accepted3ms2692 KiB
6Accepted3ms2948 KiB
7Accepted3ms3120 KiB
8Accepted3ms3340 KiB
9Accepted3ms3336 KiB
10Accepted3ms3320 KiB
11Accepted3ms3636 KiB
12Accepted3ms3884 KiB
13Accepted3ms3732 KiB
subtask313/13
14Accepted75ms25620 KiB
15Accepted79ms26124 KiB
16Accepted158ms31700 KiB
17Accepted175ms33480 KiB
18Accepted187ms33416 KiB
19Accepted186ms33360 KiB
20Accepted168ms33572 KiB
21Accepted182ms34064 KiB
22Accepted79ms27108 KiB
23Accepted79ms27112 KiB
subtask417/17
24Accepted6ms5968 KiB
25Accepted4ms5844 KiB
26Accepted6ms6012 KiB
27Accepted7ms6488 KiB
28Accepted7ms6492 KiB
29Accepted6ms5844 KiB
30Accepted6ms5992 KiB
31Accepted6ms5848 KiB
32Accepted4ms5324 KiB
33Accepted4ms5280 KiB
34Accepted4ms5072 KiB
35Accepted4ms5068 KiB
subtask559/59
36Accepted331ms62924 KiB
37Accepted273ms58472 KiB
38Accepted358ms82448 KiB
39Accepted386ms82316 KiB
40Accepted402ms83216 KiB
41Accepted298ms62488 KiB
42Accepted310ms62764 KiB
43Accepted308ms62836 KiB
44Accepted312ms62488 KiB
45Accepted174ms53236 KiB
46Accepted193ms34580 KiB
47Accepted193ms34724 KiB
48Accepted192ms34620 KiB
49Accepted192ms34616 KiB