10652 2024. 04. 07 18:56:17 111 XORfa visszatér cpp17 Futási hiba 28/100 1.57s 163148 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 Összpont Teszt Verdikt Idő Memória
subtask1 0/0
1 Elfogadva 3ms 1896 KiB
2 Elfogadva 3ms 2088 KiB
subtask2 11/11
3 Elfogadva 3ms 2464 KiB
4 Elfogadva 3ms 2452 KiB
5 Elfogadva 3ms 2772 KiB
6 Elfogadva 3ms 2944 KiB
7 Elfogadva 3ms 2896 KiB
8 Elfogadva 3ms 2900 KiB
9 Elfogadva 3ms 3160 KiB
10 Elfogadva 3ms 2860 KiB
11 Elfogadva 3ms 2864 KiB
12 Elfogadva 3ms 2868 KiB
13 Elfogadva 3ms 3072 KiB
subtask3 0/13
14 Futási hiba 30ms 16248 KiB
15 Futási hiba 32ms 16504 KiB
16 Elfogadva 123ms 20988 KiB
17 Elfogadva 144ms 30152 KiB
18 Elfogadva 143ms 34868 KiB
19 Elfogadva 146ms 37516 KiB
20 Elfogadva 131ms 25684 KiB
21 Elfogadva 146ms 30100 KiB
22 Futási hiba 32ms 16576 KiB
23 Futási hiba 30ms 16548 KiB
subtask4 17/17
24 Elfogadva 6ms 6080 KiB
25 Elfogadva 4ms 6004 KiB
26 Elfogadva 6ms 6132 KiB
27 Elfogadva 7ms 8248 KiB
28 Elfogadva 7ms 8512 KiB
29 Elfogadva 6ms 6264 KiB
30 Elfogadva 6ms 6540 KiB
31 Elfogadva 6ms 6640 KiB
32 Elfogadva 35ms 4836 KiB
33 Elfogadva 35ms 4828 KiB
34 Elfogadva 35ms 4776 KiB
35 Elfogadva 35ms 4860 KiB
subtask5 0/59
36 Elfogadva 230ms 94232 KiB
37 Elfogadva 204ms 86488 KiB
38 Elfogadva 335ms 160956 KiB
39 Elfogadva 301ms 162504 KiB
40 Elfogadva 377ms 163148 KiB
41 Elfogadva 228ms 93544 KiB
42 Elfogadva 233ms 94012 KiB
43 Elfogadva 230ms 93468 KiB
44 Elfogadva 275ms 93616 KiB
45 Elfogadva 158ms 86924 KiB
46 Időlimit túllépés 1.554s 22760 KiB
47 Időlimit túllépés 1.57s 22884 KiB
48 Időlimit túllépés 1.539s 22912 KiB
49 Időlimit túllépés 1.559s 22972 KiB