106522024-04-07 18:56:17111XORfa visszatércpp17Futási hiba 28/1001.57s163148 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];
			}
		}
		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
1Elfogadva3ms1896 KiB
2Elfogadva3ms2088 KiB
subtask211/11
3Elfogadva3ms2464 KiB
4Elfogadva3ms2452 KiB
5Elfogadva3ms2772 KiB
6Elfogadva3ms2944 KiB
7Elfogadva3ms2896 KiB
8Elfogadva3ms2900 KiB
9Elfogadva3ms3160 KiB
10Elfogadva3ms2860 KiB
11Elfogadva3ms2864 KiB
12Elfogadva3ms2868 KiB
13Elfogadva3ms3072 KiB
subtask30/13
14Futási hiba30ms16248 KiB
15Futási hiba32ms16504 KiB
16Elfogadva123ms20988 KiB
17Elfogadva144ms30152 KiB
18Elfogadva143ms34868 KiB
19Elfogadva146ms37516 KiB
20Elfogadva131ms25684 KiB
21Elfogadva146ms30100 KiB
22Futási hiba32ms16576 KiB
23Futási hiba30ms16548 KiB
subtask417/17
24Elfogadva6ms6080 KiB
25Elfogadva4ms6004 KiB
26Elfogadva6ms6132 KiB
27Elfogadva7ms8248 KiB
28Elfogadva7ms8512 KiB
29Elfogadva6ms6264 KiB
30Elfogadva6ms6540 KiB
31Elfogadva6ms6640 KiB
32Elfogadva35ms4836 KiB
33Elfogadva35ms4828 KiB
34Elfogadva35ms4776 KiB
35Elfogadva35ms4860 KiB
subtask50/59
36Elfogadva230ms94232 KiB
37Elfogadva204ms86488 KiB
38Elfogadva335ms160956 KiB
39Elfogadva301ms162504 KiB
40Elfogadva377ms163148 KiB
41Elfogadva228ms93544 KiB
42Elfogadva233ms94012 KiB
43Elfogadva230ms93468 KiB
44Elfogadva275ms93616 KiB
45Elfogadva158ms86924 KiB
46Időlimit túllépés1.554s22760 KiB
47Időlimit túllépés1.57s22884 KiB
48Időlimit túllépés1.539s22912 KiB
49Időlimit túllépés1.559s22972 KiB