106732024-04-07 21:09:24111XORfa visszatércpp17Elfogadva 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;
}
RészfeladatÖsszpontTesztVerdiktIdőMemória
subtask10/0
1Elfogadva3ms1828 KiB
2Elfogadva3ms2064 KiB
subtask211/11
3Elfogadva3ms2224 KiB
4Elfogadva3ms2476 KiB
5Elfogadva3ms2692 KiB
6Elfogadva3ms2948 KiB
7Elfogadva3ms3120 KiB
8Elfogadva3ms3340 KiB
9Elfogadva3ms3336 KiB
10Elfogadva3ms3320 KiB
11Elfogadva3ms3636 KiB
12Elfogadva3ms3884 KiB
13Elfogadva3ms3732 KiB
subtask313/13
14Elfogadva75ms25620 KiB
15Elfogadva79ms26124 KiB
16Elfogadva158ms31700 KiB
17Elfogadva175ms33480 KiB
18Elfogadva187ms33416 KiB
19Elfogadva186ms33360 KiB
20Elfogadva168ms33572 KiB
21Elfogadva182ms34064 KiB
22Elfogadva79ms27108 KiB
23Elfogadva79ms27112 KiB
subtask417/17
24Elfogadva6ms5968 KiB
25Elfogadva4ms5844 KiB
26Elfogadva6ms6012 KiB
27Elfogadva7ms6488 KiB
28Elfogadva7ms6492 KiB
29Elfogadva6ms5844 KiB
30Elfogadva6ms5992 KiB
31Elfogadva6ms5848 KiB
32Elfogadva4ms5324 KiB
33Elfogadva4ms5280 KiB
34Elfogadva4ms5072 KiB
35Elfogadva4ms5068 KiB
subtask559/59
36Elfogadva331ms62924 KiB
37Elfogadva273ms58472 KiB
38Elfogadva358ms82448 KiB
39Elfogadva386ms82316 KiB
40Elfogadva402ms83216 KiB
41Elfogadva298ms62488 KiB
42Elfogadva310ms62764 KiB
43Elfogadva308ms62836 KiB
44Elfogadva312ms62488 KiB
45Elfogadva174ms53236 KiB
46Elfogadva193ms34580 KiB
47Elfogadva193ms34724 KiB
48Elfogadva192ms34620 KiB
49Elfogadva192ms34616 KiB