106552024-04-07 19:00:40111XORfa visszatércpp17Futási hiba 28/1001.559s163696 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()){
			exit(1);
		}
		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]);
		}
		if(ans.empty()){
			while(true);
		}
		// for(int i:ans)cout<<i<<' ';cout<<'\n';
		cout<<*--ans.end()<<'\n';
	}
	return 0;
}
RészfeladatÖsszpontTesztVerdiktIdőMemória
subtask10/0
1Elfogadva3ms1896 KiB
2Elfogadva3ms2124 KiB
subtask211/11
3Elfogadva3ms2748 KiB
4Elfogadva3ms3028 KiB
5Elfogadva3ms3324 KiB
6Elfogadva3ms3216 KiB
7Elfogadva3ms3352 KiB
8Elfogadva3ms3576 KiB
9Elfogadva3ms3524 KiB
10Elfogadva3ms3548 KiB
11Elfogadva3ms3500 KiB
12Elfogadva3ms3612 KiB
13Elfogadva3ms3584 KiB
subtask30/13
14Futási hiba30ms16772 KiB
15Időlimit túllépés1.549s9472 KiB
16Elfogadva119ms21400 KiB
17Elfogadva141ms30500 KiB
18Elfogadva142ms35180 KiB
19Elfogadva145ms37776 KiB
20Elfogadva130ms26080 KiB
21Elfogadva145ms30600 KiB
22Futási hiba30ms16728 KiB
23Futási hiba32ms17152 KiB
subtask417/17
24Elfogadva6ms6820 KiB
25Elfogadva6ms6912 KiB
26Elfogadva6ms7196 KiB
27Elfogadva8ms9560 KiB
28Elfogadva7ms9312 KiB
29Elfogadva6ms7184 KiB
30Elfogadva6ms7228 KiB
31Elfogadva6ms7176 KiB
32Elfogadva35ms5536 KiB
33Elfogadva35ms5560 KiB
34Elfogadva35ms5484 KiB
35Elfogadva35ms5572 KiB
subtask50/59
36Elfogadva231ms94844 KiB
37Elfogadva233ms87416 KiB
38Elfogadva340ms161716 KiB
39Elfogadva303ms163228 KiB
40Elfogadva308ms163696 KiB
41Elfogadva231ms94136 KiB
42Elfogadva266ms94776 KiB
43Elfogadva233ms94224 KiB
44Elfogadva261ms94360 KiB
45Elfogadva174ms87728 KiB
46Időlimit túllépés1.527s23488 KiB
47Időlimit túllépés1.559s23316 KiB
48Időlimit túllépés1.552s23480 KiB
49Időlimit túllépés1.559s23476 KiB