106512024-04-07 18:50:25111XORfa visszatércpp17Futási hiba 28/1001.582s254332 KiB
#include<bits/stdc++.h>
using namespace std;

#define int long long

struct Trie{
	vector<array<int,2>>t;
	vector<set<int>>v;
	
	Trie():t(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();
				v.emplace_back();
			}
			y=t[y][b];
			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];
			v[y].erase(n);
		}
	}
	
	int get(int x){
		int y=0;
		for(int i=30;i>=0;i--){
			int b=x>>i&1;
			if(t[y][b^1]&&!v[t[y][b^1]].empty()){
				y=t[y][b^1];
			}
			else{
				y=t[y][b];
			}
		}
		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
2Elfogadva3ms2096 KiB
subtask211/11
3Elfogadva3ms2748 KiB
4Elfogadva3ms2948 KiB
5Elfogadva3ms3236 KiB
6Elfogadva3ms3268 KiB
7Elfogadva3ms3288 KiB
8Elfogadva3ms3292 KiB
9Elfogadva3ms3268 KiB
10Elfogadva3ms3508 KiB
11Elfogadva4ms3940 KiB
12Elfogadva3ms3876 KiB
13Elfogadva3ms3716 KiB
subtask30/13
14Futási hiba32ms16540 KiB
15Futási hiba30ms16528 KiB
16Elfogadva449ms49748 KiB
17Elfogadva684ms115040 KiB
18Elfogadva648ms148072 KiB
19Elfogadva669ms164908 KiB
20Elfogadva569ms82892 KiB
21Elfogadva587ms115780 KiB
22Futási hiba32ms17632 KiB
23Futási hiba32ms17760 KiB
subtask417/17
24Elfogadva8ms7884 KiB
25Elfogadva8ms7396 KiB
26Elfogadva8ms9036 KiB
27Elfogadva9ms11012 KiB
28Elfogadva9ms11024 KiB
29Elfogadva8ms7948 KiB
30Elfogadva8ms8100 KiB
31Elfogadva8ms8100 KiB
32Elfogadva39ms8228 KiB
33Elfogadva41ms8380 KiB
34Elfogadva41ms8188 KiB
35Elfogadva41ms8104 KiB
subtask50/59
36Elfogadva559ms144272 KiB
37Elfogadva439ms100524 KiB
38Elfogadva685ms222428 KiB
39Elfogadva762ms232728 KiB
40Elfogadva795ms254332 KiB
41Elfogadva570ms142452 KiB
42Elfogadva560ms143536 KiB
43Elfogadva554ms142364 KiB
44Elfogadva551ms142432 KiB
45Elfogadva231ms76392 KiB
46Időlimit túllépés1.552s82128 KiB
47Időlimit túllépés1.582s82272 KiB
48Időlimit túllépés1.559s82224 KiB
49Időlimit túllépés1.554s82176 KiB