106682024-04-07 20:14:39111XORfa visszatércpp17Időlimit túllépés 11/1001.588s522560 KiB
#include<bits/stdc++.h>
using namespace std;

#define int long long

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

struct ST{
	int n;
	vector<Trie>t;

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

	void update(int i,int l,int r,int ll,int rr,int xx){
		if(r<ll||l>rr){
			return;
		}
		t[i].add(xx);
		if(l>=r&&r<=l){
			return;
		}
		update(i*2+1,l,(l+r)/2,ll,rr,xx);
		update(i*2+2,(l+r)/2+1,r,ll,rr,xx);
	}

	int query(int i,int l,int r,int pp){
		if(r<pp||l>pp){
			return 0;
		}
		int ans=0;
		if(l==r){
			return t[i].b;
		}
		ans=max(ans,query(i*2+1,l,(l+r)/2,pp));
		ans=max(ans,query(i*2+2,(l+r)/2+1,r,pp));
		return ans;
	}
};

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]);
		}
	}
	for(int i=0;i<Q;i++){
		cout<<st.query(0,0,Q-1,i)<<'\n';
	}
	return 0;
}
RészfeladatÖsszpontTesztVerdiktIdőMemória
subtask10/0
1Elfogadva3ms1832 KiB
2Elfogadva3ms2064 KiB
subtask211/11
3Elfogadva6ms7324 KiB
4Elfogadva4ms5744 KiB
5Elfogadva8ms10700 KiB
6Elfogadva6ms8648 KiB
7Elfogadva6ms7532 KiB
8Elfogadva8ms10188 KiB
9Elfogadva6ms8324 KiB
10Elfogadva4ms4200 KiB
11Elfogadva4ms4324 KiB
12Elfogadva4ms4556 KiB
13Elfogadva4ms4452 KiB
subtask30/13
14Elfogadva282ms185052 KiB
15Elfogadva337ms204740 KiB
16Időlimit túllépés1.529s36940 KiB
17Időlimit túllépés1.567s38420 KiB
18Időlimit túllépés1.564s43764 KiB
19Időlimit túllépés1.544s54072 KiB
20Időlimit túllépés1.544s36260 KiB
21Időlimit túllépés1.572s38452 KiB
22Elfogadva356ms205080 KiB
23Elfogadva340ms204972 KiB
subtask40/17
24Elfogadva529ms374600 KiB
25Elfogadva208ms186676 KiB
26Elfogadva889ms498924 KiB
27Futási hiba970ms522560 KiB
28Futási hiba973ms522512 KiB
29Elfogadva435ms318696 KiB
30Elfogadva586ms414632 KiB
31Elfogadva588ms414228 KiB
32Elfogadva275ms32492 KiB
33Elfogadva277ms32576 KiB
34Elfogadva277ms32612 KiB
35Elfogadva277ms32592 KiB
subtask50/59
36Futási hiba736ms522464 KiB
37Futási hiba702ms522436 KiB
38Futási hiba680ms522408 KiB
39Futási hiba698ms522444 KiB
40Futási hiba646ms522416 KiB
41Futási hiba728ms522380 KiB
42Futási hiba720ms522356 KiB
43Futási hiba714ms522348 KiB
44Futási hiba722ms522352 KiB
45Futási hiba495ms522368 KiB
46Időlimit túllépés1.577s198284 KiB
47Időlimit túllépés1.544s188380 KiB
48Időlimit túllépés1.552s188496 KiB
49Időlimit túllépés1.588s188524 KiB