106562024-04-07 19:01:49111XORfa visszatércpp17Futási hiba 28/1001.575s163492 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];
			}
		}
		if(v[y].empty()){
			while(true);
		}
		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);
	multiset<int>ans;
	ans.insert(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);
				ans.erase(ans.find(v[x]^v[y]));
				if(s.size()>1){
					int z=t.get(v[y]);
					if(!p[y].count(z)){
						ans.insert(v[y]^v[z]);
						p[y].insert(z);
						p[z].insert(y);
					}
				}
			}
			p[x].clear();
		}
		else{
			if(!s.empty()){
				int y=t.get(v[x]);
				if(!p[x].count(y)){
					ans.insert(v[x]^v[y]);
					p[x].insert(y);
					p[y].insert(x);
				}
			}
			s.insert(x);
			t.add(x,v[x]);
		}
		// for(int i:ans)cout<<i<<' ';cout<<'\n';
		cout<<*--ans.end()<<'\n';
	}
	return 0;
}
RészfeladatÖsszpontTesztVerdiktIdőMemória
subtask10/0
1Elfogadva3ms1900 KiB
2Elfogadva3ms2120 KiB
subtask211/11
3Elfogadva3ms2484 KiB
4Elfogadva3ms2720 KiB
5Elfogadva3ms3064 KiB
6Elfogadva3ms3228 KiB
7Elfogadva3ms3512 KiB
8Elfogadva3ms3728 KiB
9Elfogadva3ms3856 KiB
10Elfogadva3ms3560 KiB
11Elfogadva3ms3816 KiB
12Elfogadva3ms3768 KiB
13Elfogadva3ms3772 KiB
subtask30/13
14Futási hiba29ms16828 KiB
15Futási hiba32ms16832 KiB
16Elfogadva120ms21592 KiB
17Elfogadva143ms30908 KiB
18Elfogadva149ms35552 KiB
19Elfogadva146ms38176 KiB
20Elfogadva134ms26372 KiB
21Elfogadva150ms30760 KiB
22Futási hiba29ms17004 KiB
23Futási hiba30ms16980 KiB
subtask417/17
24Elfogadva6ms6504 KiB
25Elfogadva4ms6448 KiB
26Elfogadva6ms6812 KiB
27Elfogadva7ms8800 KiB
28Elfogadva7ms8800 KiB
29Elfogadva6ms6664 KiB
30Elfogadva6ms6932 KiB
31Elfogadva6ms6904 KiB
32Elfogadva35ms5272 KiB
33Elfogadva35ms5268 KiB
34Elfogadva35ms5268 KiB
35Elfogadva35ms5268 KiB
subtask50/59
36Elfogadva268ms94632 KiB
37Elfogadva228ms86876 KiB
38Elfogadva340ms161216 KiB
39Elfogadva300ms162980 KiB
40Elfogadva379ms163492 KiB
41Elfogadva229ms93900 KiB
42Elfogadva231ms94568 KiB
43Elfogadva263ms94020 KiB
44Elfogadva230ms94168 KiB
45Elfogadva156ms87544 KiB
46Időlimit túllépés1.549s23484 KiB
47Időlimit túllépés1.564s23564 KiB
48Időlimit túllépés1.575s23496 KiB
49Időlimit túllépés1.562s23492 KiB