10659 2024. 04. 07 19:12:57 111 XORfa visszatér cpp17 Futási hiba 28/100 1.57s 164308 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);
	multimap<int,pair<int,int>>ans;
	ans.emplace(0,pair<int,int>{0,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);
			}
			p[x].clear();
		}
		else{
			if(!s.empty()){
				int y=t.get(v[x]);
				if(!p[x].count(y)){
					ans.emplace(v[x]^v[y],pair<int,int>{x,y});
					p[x].insert(y);
					p[y].insert(x);
				}
			}
			s.insert(x);
			t.add(x,v[x]);
		}
		while((--ans.end())->first!=0&&(!s.count((--ans.end())->second.first)||!s.count((--ans.end())->second.second))){
			auto[x,y]=(--ans.end())->second;
			ans.erase(--ans.end());
			if(s.size()>1){
				if(s.count(x)){
					int z=t.get(v[x]);
					if(!p[x].count(z)){
						ans.emplace(v[x]^v[z],pair<int,int>{x,z});
						p[x].insert(z);
						p[z].insert(x);
					}
				}
				if(s.count(y)){
					int z=t.get(v[y]);
					if(!p[y].count(z)){
						ans.emplace(v[y]^v[z],pair<int,int>{y,z});
						p[y].insert(z);
						p[z].insert(y);
					}
				}
			}
		}
		// for(auto[i,_]:ans)cout<<i<<' ';cout<<endl;
		cout<<(--ans.end())->first<<'\n';
	}
	return 0;
}
Részfeladat Összpont Teszt Verdikt Idő Memória
subtask1 0/0
1 Elfogadva 3ms 1900 KiB
2 Elfogadva 3ms 2096 KiB
subtask2 11/11
3 Elfogadva 3ms 2456 KiB
4 Elfogadva 3ms 2708 KiB
5 Elfogadva 3ms 2716 KiB
6 Elfogadva 3ms 2932 KiB
7 Elfogadva 3ms 2948 KiB
8 Elfogadva 3ms 2892 KiB
9 Elfogadva 3ms 3144 KiB
10 Elfogadva 3ms 2852 KiB
11 Elfogadva 3ms 2856 KiB
12 Elfogadva 3ms 3108 KiB
13 Elfogadva 3ms 3060 KiB
subtask3 0/13
14 Futási hiba 30ms 16248 KiB
15 Futási hiba 29ms 16544 KiB
16 Futási hiba 29ms 16548 KiB
17 Elfogadva 148ms 31588 KiB
18 Elfogadva 153ms 36772 KiB
19 Elfogadva 173ms 38768 KiB
20 Elfogadva 141ms 27732 KiB
21 Futási hiba 29ms 16864 KiB
22 Futási hiba 29ms 16696 KiB
23 Futási hiba 29ms 16968 KiB
subtask4 17/17
24 Elfogadva 6ms 6496 KiB
25 Elfogadva 4ms 6496 KiB
26 Elfogadva 6ms 6880 KiB
27 Elfogadva 7ms 8900 KiB
28 Elfogadva 7ms 8908 KiB
29 Elfogadva 4ms 6760 KiB
30 Elfogadva 6ms 6988 KiB
31 Elfogadva 4ms 7088 KiB
32 Elfogadva 24ms 5324 KiB
33 Elfogadva 24ms 5368 KiB
34 Elfogadva 24ms 5264 KiB
35 Elfogadva 24ms 5260 KiB
subtask5 0/59
36 Elfogadva 212ms 96476 KiB
37 Elfogadva 182ms 86928 KiB
38 Elfogadva 270ms 162604 KiB
39 Elfogadva 360ms 163696 KiB
40 Elfogadva 307ms 164308 KiB
41 Elfogadva 209ms 95520 KiB
42 Elfogadva 210ms 96028 KiB
43 Elfogadva 211ms 95516 KiB
44 Elfogadva 241ms 95460 KiB
45 Elfogadva 146ms 86920 KiB
46 Időlimit túllépés 1.565s 21860 KiB
47 Időlimit túllépés 1.559s 21796 KiB
48 Időlimit túllépés 1.567s 21752 KiB
49 Időlimit túllépés 1.57s 21712 KiB