3308 | 2023-02-24 20:32:05 | gortomi | XORfa visszatér | cpp17 | Időlimit túllépés 28/100 | 1.598s | 522304 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 l = x.first, r = x.second;
int val = no[l];
while(l % b != 0 && l <= r)
{
ins[l].push_back(val);
l++;
}
while(l + b - 1 <= r)
{
trie[l / b].upd(v[val], 29, 1);
maxi[l / b] = max(maxi[l / b], trie[l / b].get(v[val], 29));
l += b;
}
while(l <= r)
{
ins[l].push_back(val);
l++;
}
}
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 | 1708 KiB | ||||
2 | Elfogadva | 3ms | 2016 KiB | ||||
subtask2 | 11/11 | ||||||
3 | Elfogadva | 4ms | 2392 KiB | ||||
4 | Elfogadva | 3ms | 2640 KiB | ||||
5 | Elfogadva | 4ms | 3048 KiB | ||||
6 | Elfogadva | 4ms | 3212 KiB | ||||
7 | Elfogadva | 4ms | 3160 KiB | ||||
8 | Elfogadva | 4ms | 3264 KiB | ||||
9 | Elfogadva | 4ms | 3420 KiB | ||||
10 | Elfogadva | 4ms | 3408 KiB | ||||
11 | Elfogadva | 4ms | 3432 KiB | ||||
12 | Elfogadva | 4ms | 3520 KiB | ||||
13 | Elfogadva | 4ms | 3732 KiB | ||||
subtask3 | 0/13 | ||||||
14 | Elfogadva | 79ms | 17360 KiB | ||||
15 | Elfogadva | 115ms | 18772 KiB | ||||
16 | Időlimit túllépés | 1.567s | 67184 KiB | ||||
17 | Időlimit túllépés | 1.554s | 77976 KiB | ||||
18 | Időlimit túllépés | 1.58s | 91800 KiB | ||||
19 | Időlimit túllépés | 1.58s | 91520 KiB | ||||
20 | Időlimit túllépés | 1.587s | 75076 KiB | ||||
21 | Időlimit túllépés | 1.55s | 78408 KiB | ||||
22 | Elfogadva | 119ms | 19264 KiB | ||||
23 | Elfogadva | 123ms | 19276 KiB | ||||
subtask4 | 17/17 | ||||||
24 | Elfogadva | 79ms | 11192 KiB | ||||
25 | Elfogadva | 45ms | 9004 KiB | ||||
26 | Elfogadva | 118ms | 13728 KiB | ||||
27 | Elfogadva | 156ms | 15712 KiB | ||||
28 | Elfogadva | 185ms | 17164 KiB | ||||
29 | Elfogadva | 71ms | 10840 KiB | ||||
30 | Elfogadva | 86ms | 11804 KiB | ||||
31 | Elfogadva | 90ms | 11680 KiB | ||||
32 | Elfogadva | 67ms | 7336 KiB | ||||
33 | Elfogadva | 67ms | 7492 KiB | ||||
34 | Elfogadva | 65ms | 7500 KiB | ||||
35 | Elfogadva | 67ms | 7392 KiB | ||||
subtask5 | 0/59 | ||||||
36 | Futási hiba | 529ms | 522304 KiB | ||||
37 | Futási hiba | 529ms | 522272 KiB | ||||
38 | Futási hiba | 523ms | 522168 KiB | ||||
39 | Futási hiba | 616ms | 522164 KiB | ||||
40 | Futási hiba | 514ms | 522144 KiB | ||||
41 | Futási hiba | 527ms | 522012 KiB | ||||
42 | Futási hiba | 529ms | 521996 KiB | ||||
43 | Futási hiba | 532ms | 522000 KiB | ||||
44 | Futási hiba | 632ms | 521980 KiB | ||||
45 | Időlimit túllépés | 1.582s | 119844 KiB | ||||
46 | Időlimit túllépés | 1.598s | 194536 KiB | ||||
47 | Időlimit túllépés | 1.577s | 203612 KiB | ||||
48 | Időlimit túllépés | 1.598s | 202712 KiB | ||||
49 | Időlimit túllépés | 1.58s | 186036 KiB |