3307 | 2023-02-24 19:53:45 | gortomi | XORfa visszatér | cpp17 | Időlimit túllépés 28/100 | 1.588s | 522252 KiB |
#include <bits/stdc++.h>
using namespace std;
vector<vector<pair<int, int> > > g;
vector<int> v;
void dfs(int n, int p)
{
for(auto x : g[n])
{
int y = x.first, z = x.second;
if(y != p)
{
v[y] = v[n] ^ z;
dfs(y, n);
}
}
}
struct node
{
int l, r, w, m;
node *lc, *rc;
node(int il, int ir)
{
l = il;
r = ir;
m = (l + r) / 2;
w = 0;
lc = nullptr;
rc = nullptr;
}
void extend()
{
if(lc == nullptr)
{
lc = new node(l, m);
rc = new node(r, m);
}
}
void upd(int k, int ind, int del)
{
w += del;
if(ind == -1) return;
extend();
if((k >> ind) & 1) rc -> upd(k, ind - 1, del);
else lc -> upd(k, ind - 1, del);
}
int get(int k, int ind)
{
if(ind == -1) return 0;
extend();
if(((k >> ind) & 1))
{
if(lc -> w > 0) return lc -> get(k, ind - 1) + (1 << ind);
else return rc -> get(k, ind - 1);
}
else
{
if(rc -> w > 0) return rc -> get(k, ind - 1) + (1 << ind);
else return lc -> get(k, ind - 1);
}
}
};
int main()
{
ios::sync_with_stdio(0);
cin.tie(0);
int n, q;
cin >> n >> q;
g.resize(n + 1);
v.resize(n + 1);
for(int i = 0; i < n - 1; i++)
{
int x, y, w;
cin >> x >> y >> w;
g[x].push_back({y, w});
g[y].push_back({x, w});
}
dfs(1, 0);
const int b = 300;
vector<int> no(q);
vector<int> act(n + 1, -1);
vector<pair<int, int> > add;
for(int i = 0; i < q; i++)
{
cin >> no[i];
if(act[no[i]] == -1)
{
act[no[i]] = i;
}
else
{
add.push_back({act[no[i]], i - 1});
act[no[i]] = -1;
}
}
for(int i = 1; i <= n; i++) if(act[i] != -1) add.push_back({act[i], q - 1});
node neu = node(0, 0);
vector<node> trie(b, neu);
vector<int> maxi(b);
vector<vector<int> > ins(q);
for(int i = 0; i < b; i++) trie[i] = node(0, (1 << 30) - 1);
for(auto x : add)
{
int val = no[x.first];
int sb = x.first / b + 1, eb = x.second / b - 1;
for(int i = sb; i <= eb; i++)
{
trie[i].upd(v[val], 29, 1);
maxi[i] = max(maxi[i], trie[i].get(v[val], 29));
}
for(int i = x.first; i <= min(sb * b - 1, x.second); i++) ins[i].push_back(val);
for(int i = max(eb * b + 1, x.first); i <= x.second; i++) ins[i].push_back(val);
}
for(int i = 0; i < q; i++)
{
int actb = i / b;
int ans = maxi[actb];
for(auto x : ins[i])
{
trie[actb].upd(v[x], 29, 1);
ans = max(ans, trie[actb].get(v[x], 29));
}
cout << ans << "\n";
for(auto x : ins[i]) trie[actb].upd(v[x], 29, -1);
}
return 0;
}
Részfeladat | Összpont | Teszt | Verdikt | Idő | Memória | ||
---|---|---|---|---|---|---|---|
subtask1 | 0/0 | ||||||
1 | Elfogadva | 3ms | 1836 KiB | ||||
2 | Elfogadva | 3ms | 2048 KiB | ||||
subtask2 | 11/11 | ||||||
3 | Elfogadva | 4ms | 2432 KiB | ||||
4 | Elfogadva | 4ms | 2400 KiB | ||||
5 | Elfogadva | 6ms | 2640 KiB | ||||
6 | Elfogadva | 4ms | 2800 KiB | ||||
7 | Elfogadva | 4ms | 2968 KiB | ||||
8 | Elfogadva | 6ms | 3224 KiB | ||||
9 | Elfogadva | 4ms | 3396 KiB | ||||
10 | Elfogadva | 6ms | 3476 KiB | ||||
11 | Elfogadva | 4ms | 3684 KiB | ||||
12 | Elfogadva | 4ms | 3820 KiB | ||||
13 | Elfogadva | 4ms | 3804 KiB | ||||
subtask3 | 0/13 | ||||||
14 | Elfogadva | 112ms | 18344 KiB | ||||
15 | Elfogadva | 177ms | 20944 KiB | ||||
16 | Időlimit túllépés | 1.567s | 117756 KiB | ||||
17 | Időlimit túllépés | 1.583s | 134968 KiB | ||||
18 | Időlimit túllépés | 1.557s | 117988 KiB | ||||
19 | Időlimit túllépés | 1.57s | 152780 KiB | ||||
20 | Időlimit túllépés | 1.57s | 129300 KiB | ||||
21 | Időlimit túllépés | 1.588s | 134388 KiB | ||||
22 | Elfogadva | 182ms | 21536 KiB | ||||
23 | Elfogadva | 184ms | 21548 KiB | ||||
subtask4 | 17/17 | ||||||
24 | Elfogadva | 158ms | 12096 KiB | ||||
25 | Elfogadva | 78ms | 9532 KiB | ||||
26 | Elfogadva | 254ms | 15372 KiB | ||||
27 | Elfogadva | 347ms | 17708 KiB | ||||
28 | Elfogadva | 412ms | 19428 KiB | ||||
29 | Elfogadva | 141ms | 11740 KiB | ||||
30 | Elfogadva | 179ms | 13192 KiB | ||||
31 | Elfogadva | 180ms | 13100 KiB | ||||
32 | Elfogadva | 130ms | 10320 KiB | ||||
33 | Elfogadva | 131ms | 10288 KiB | ||||
34 | Elfogadva | 131ms | 10232 KiB | ||||
35 | Elfogadva | 129ms | 10240 KiB | ||||
subtask5 | 0/59 | ||||||
36 | Futási hiba | 532ms | 522252 KiB | ||||
37 | Futási hiba | 527ms | 522224 KiB | ||||
38 | Futási hiba | 526ms | 522200 KiB | ||||
39 | Futási hiba | 617ms | 521972 KiB | ||||
40 | Futási hiba | 521ms | 521968 KiB | ||||
41 | Futási hiba | 529ms | 521952 KiB | ||||
42 | Futási hiba | 532ms | 521724 KiB | ||||
43 | Futási hiba | 532ms | 521724 KiB | ||||
44 | Futási hiba | 643ms | 521708 KiB | ||||
45 | Időlimit túllépés | 1.565s | 110584 KiB | ||||
46 | Időlimit túllépés | 1.588s | 226216 KiB | ||||
47 | Időlimit túllépés | 1.564s | 228464 KiB | ||||
48 | Időlimit túllépés | 1.559s | 226100 KiB | ||||
49 | Időlimit túllépés | 1.58s | 232292 KiB |