3322 | 2023-02-25 14:33:01 | gortomi | XORfa visszatér | cpp17 | Időlimit túllépés 28/100 | 1.613s | 521828 KiB |
#include <bits/stdc++.h>
using namespace std;
#define int long long
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 w;
node *lc, *rc;
node()
{
w = 0;
lc = nullptr;
rc = nullptr;
}
void extend()
{
if(lc == nullptr)
{
lc = new node();
rc = new node();
}
}
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);
}
}
};
signed 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 root = node();
vector<node> trie(b, root);
vector<int> maxi(b);
vector<vector<int> > ins(q);
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 | 1836 KiB | ||||
2 | Elfogadva | 3ms | 2060 KiB | ||||
subtask2 | 11/11 | ||||||
3 | Elfogadva | 4ms | 2528 KiB | ||||
4 | Elfogadva | 3ms | 2580 KiB | ||||
5 | Elfogadva | 4ms | 2752 KiB | ||||
6 | Elfogadva | 4ms | 2860 KiB | ||||
7 | Elfogadva | 4ms | 3072 KiB | ||||
8 | Elfogadva | 4ms | 3408 KiB | ||||
9 | Elfogadva | 4ms | 3336 KiB | ||||
10 | Elfogadva | 4ms | 3516 KiB | ||||
11 | Elfogadva | 4ms | 3604 KiB | ||||
12 | Elfogadva | 4ms | 3648 KiB | ||||
13 | Elfogadva | 4ms | 3592 KiB | ||||
subtask3 | 0/13 | ||||||
14 | Elfogadva | 86ms | 20708 KiB | ||||
15 | Elfogadva | 123ms | 23460 KiB | ||||
16 | Időlimit túllépés | 1.567s | 124772 KiB | ||||
17 | Időlimit túllépés | 1.557s | 146548 KiB | ||||
18 | Időlimit túllépés | 1.572s | 137720 KiB | ||||
19 | Időlimit túllépés | 1.582s | 167104 KiB | ||||
20 | Időlimit túllépés | 1.552s | 140116 KiB | ||||
21 | Időlimit túllépés | 1.595s | 146492 KiB | ||||
22 | Elfogadva | 133ms | 24168 KiB | ||||
23 | Elfogadva | 123ms | 24268 KiB | ||||
subtask4 | 17/17 | ||||||
24 | Elfogadva | 75ms | 10496 KiB | ||||
25 | Elfogadva | 41ms | 8548 KiB | ||||
26 | Elfogadva | 112ms | 13392 KiB | ||||
27 | Elfogadva | 144ms | 15148 KiB | ||||
28 | Elfogadva | 174ms | 16468 KiB | ||||
29 | Elfogadva | 64ms | 10808 KiB | ||||
30 | Elfogadva | 85ms | 11540 KiB | ||||
31 | Elfogadva | 87ms | 11768 KiB | ||||
32 | Elfogadva | 68ms | 10652 KiB | ||||
33 | Elfogadva | 68ms | 10668 KiB | ||||
34 | Elfogadva | 68ms | 10764 KiB | ||||
35 | Elfogadva | 68ms | 10768 KiB | ||||
subtask5 | 0/59 | ||||||
36 | Futási hiba | 754ms | 521828 KiB | ||||
37 | Futási hiba | 630ms | 521820 KiB | ||||
38 | Futási hiba | 652ms | 521800 KiB | ||||
39 | Futási hiba | 638ms | 521776 KiB | ||||
40 | Futási hiba | 732ms | 521768 KiB | ||||
41 | Futási hiba | 651ms | 521676 KiB | ||||
42 | Futási hiba | 633ms | 521660 KiB | ||||
43 | Futási hiba | 615ms | 521660 KiB | ||||
44 | Futási hiba | 615ms | 521644 KiB | ||||
45 | Időlimit túllépés | 1.564s | 109492 KiB | ||||
46 | Időlimit túllépés | 1.582s | 237536 KiB | ||||
47 | Időlimit túllépés | 1.57s | 238116 KiB | ||||
48 | Időlimit túllépés | 1.613s | 254384 KiB | ||||
49 | Időlimit túllépés | 1.578s | 241176 KiB |