# |
Submission time |
Handle |
Problem |
Language |
Result |
Execution time |
Memory |
814997 |
2023-08-08T11:36:58 Z |
WonderfulWhale |
Jail (JOI22_jail) |
C++17 |
|
5000 ms |
566332 KB |
//#pragma GCC optimize("O3,unroll-loops")
#include <bits/stdc++.h>
using namespace std;
#define int int64_t
#define pii pair<int, int>
#define st first
#define nd second
#define pb push_back
#define all(x) (x).begin(), (x).end()
#define sz(x) (int)(x).size()
int Gg = 0;
struct SegTree {
int T=1;
vector<unordered_set<int>> t;
void build(int n) {
T=1;
while(T<=n) T*=2;
t.resize(2*T);
for(int i=0;i<2*T;i++) t[i].clear();
}
vector<int> query(int l, int r) {
l+=T, r+=T;
vector<int> ret;
for(int x:t[l]) ret.pb(x);
if(l!=r) for(int x:t[r]) ret.pb(x);
while(l/2!=r/2) {
if(l%2==0) for(int x:t[l+1]) ret.pb(x);
if(r%2==1) for(int x:t[r-1]) ret.pb(x);
l/=2;
r/=2;
}
return ret;
}
void add(int x, int val) {
x+=T;
while(x) {
t[x].insert(val);
x/=2;
}
}
void remove(int x, int val) {
x+=T;
while(x) {
t[x].erase(val);
x/=2;
}
}
};
struct SegTree2 {
int T = 1;
vector<unordered_set<int>> t;
void build(int n) {
T=1;
while(T<=n) T*=2;
t.resize(2*T);
for(int i=0;i<2*T;i++) t[i].clear();
}
void add(int l, int r, int val) {
l+=T, r+=T;
t[l].insert(val);
if(l!=r) t[r].insert(val);
while(l/2!=r/2) {
if(l%2==0) t[l+1].insert(val);
if(r%2==1) t[r-1].insert(val);
l/=2;
r/=2;
}
}
void remove(int l, int r, int val) {
l+=T, r+=T;
t[l].erase(val);
if(l!=r) t[r].insert(val);
while(l/2!=r/2) {
if(l%2==0) t[l+1].erase(val);
if(r%2==1) t[r-1].erase(val);
l/=2;
r/=2;
}
}
vector<int> query(int x) {
vector<int> ret;
x+=T;
while(x) {
for(int y:t[x]) ret.pb(y);
x/=2;
}
return ret;
}
};
vector<int> G[120009];
vector<int> G2[120009];
int tin[120009], tout[120009], T;
int jp2[120009][20];
int deg[120009];
pii tab[120009];
int col[120009];
int dep[120009];
int p[120009];
int heavy[120009];
int pos[120009], P;
int head[120009];
int dfs(int x, int y) {
p[x] = y;
dep[x] = dep[y]+1;
int sz = 1, max_sz=0;
tin[x] = ++T;
jp2[x][0] = y;
for(int i=1;i<20;i++) jp2[x][i] = jp2[jp2[x][i-1]][i-1];
for(int z:G[x]) if(z!=y) {
int c_sz = dfs(z, x);
sz += c_sz;
if(c_sz>max_sz) {
max_sz = c_sz;
heavy[x] = z;
}
}
tout[x] = ++T;
return sz;
}
void decompose(int x, int h) {
head[x] = h;
pos[x] = ++P;
if(heavy[x]) {
decompose(heavy[x], h);
}
for(int y:G[x]) {
if(y!=p[x]&&y!=heavy[x]) decompose(y, y);
}
}
bool is_ancestor(int x, int y) {
return tin[x]<=tin[y]&&tout[x]>=tout[y];
}
int lca(int x, int y) {
if(is_ancestor(x, y)) return x;
if(is_ancestor(y, x)) return y;
for(int i=19;i>=0;i--) {
if(!is_ancestor(jp2[x][i], y)) {
x = jp2[x][i];
}
}
return jp2[x][0];
}
bool is_on_path(int x, int a, int b) {
return is_ancestor(a, x)&&is_ancestor(x, b);
}
bool f(int x, int a, int b) {
int y = lca(a, b);
//cerr << "lca: " << a << " " << b << " " << y << "\n";
//cerr << "checking: " << x << " " << a << " " << b << " " << (is_on_path(x, y, a)||is_on_path(x, y, b)) << "\n";
return is_on_path(x, y, a)||is_on_path(x, y, b);
}
SegTree seg1;
SegTree2 seg2;
vector<int> hld_query(int a, int b) {
//cout << "hld_query: " << a << " " << b << "\n";
vector<int> ret;
for (; head[a] != head[b]; b=p[head[b]]) {
if (dep[head[a]] > dep[head[b]]) swap(a, b);
for(int x:seg1.query(pos[head[b]], pos[b])) ret.pb(x);
}
if (dep[a] > dep[b]) swap(a, b);
for(int x:seg1.query(pos[a], pos[b])) ret.pb(x);
return ret;
}
void hld_add(int a, int b, int val) {
//cout << "hld_query: " << a << " " << b << "\n";
vector<int> ret;
for (; head[a] != head[b]; b=p[head[b]]) {
if (dep[head[a]] > dep[head[b]]) swap(a, b);
seg2.add(pos[head[b]], pos[b], val);
}
if (dep[a] > dep[b]) swap(a, b);
seg2.add(pos[a], pos[b], val);
}
void hld_remove(int a, int b, int val) {
//cout << "hld_query: " << a << " " << b << "\n";
vector<int> ret;
for (; head[a] != head[b]; b=p[head[b]]) {
if (dep[head[a]] > dep[head[b]]) swap(a, b);
seg2.remove(pos[head[b]], pos[b], val);
}
if (dep[a] > dep[b]) swap(a, b);
seg2.remove(pos[a], pos[b], val);
}
int N;
bool dfs2(int x) {
assert(col[x]==0);
col[x] = 1;
vector<int> v1 = hld_query(tab[x].st, tab[x].nd);
Gg += sz(v1);
//assert(Gg<=2*N);
for(int y:v1){
if(y==x) continue;
if(col[y]==1) return false;
}
for(int y:v1) {
if(y==x) continue;
if(col[y]==1) return false;
if(col[y]==0&&!dfs2(y)) return false;
}
vector<int> v2 = seg2.query(pos[tab[x].nd]);
int X = pos[tab[x].nd];
X+=seg2.T;
while(X) {
while(sz(seg2.t[X])) {
auto it = seg2.t[X].begin();
if(*it==x) {
if(sz(seg2.t[X])==1) break;
it++;
}
int y = *it;
//cout << "checking: " << y << " for: " << x << "\n";
if(col[y]==1) return false;
if(col[y]==0&&!dfs2(y)) return false;
seg2.t[X].erase(y);
}
X/=2;
}
Gg += sz(v2);
//assert(Gg<=2*N);
col[x] = 2;
seg1.remove(pos[tab[x].st], x);
hld_remove(tab[x].st, tab[x].nd, x);
return true;
}
int32_t main() {
ios_base::sync_with_stdio(false);
cin.tie(NULL);
int q=1;
cin >> q;
while(q--) {
int n, m;
cin >> n;
N = n;
Gg=0;
for(int i=1;i<=n;i++) {
G[i].clear();
head[i] = 0;
heavy[i] = 0;
dep[i] = 0;
p[i] = 0;
}
for(int i=0;i<n-1;i++) {
int a, b;
cin >> a >> b;
G[a].pb(b);
G[b].pb(a);
}
tin[0] = T = 0;
dfs(1, 0);
P = 0;
decompose(1, 1);
tout[0] = T;
cin >> m;
for(int i=0;i<m;i++) {
G2[i].clear();
deg[i] = 0;
col[i] = 0;
}
seg1.build(n+9);
seg2.build(n+9);
for(int i=0;i<m;i++) {
cin >> tab[i].st >> tab[i].nd;
seg1.add(pos[tab[i].st], i);
hld_add(tab[i].st, tab[i].nd, i);
}
bool ans = true;
for(int i=0;i<m;i++) {
if(!ans) continue;
if(!col[i]) {
ans&=dfs2(i);
}
}
if(ans) {
cout << "Yes\n";
} else {
cout << "No\n";
}
}
}
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
3 ms |
5972 KB |
Output is correct |
2 |
Correct |
3 ms |
5972 KB |
Output is correct |
3 |
Correct |
3 ms |
5972 KB |
Output is correct |
4 |
Correct |
15 ms |
6432 KB |
Output is correct |
5 |
Correct |
30 ms |
6332 KB |
Output is correct |
6 |
Correct |
4 ms |
6228 KB |
Output is correct |
7 |
Correct |
4 ms |
6228 KB |
Output is correct |
8 |
Correct |
6 ms |
6356 KB |
Output is correct |
9 |
Correct |
53 ms |
13048 KB |
Output is correct |
10 |
Correct |
76 ms |
74472 KB |
Output is correct |
11 |
Correct |
11 ms |
6192 KB |
Output is correct |
12 |
Correct |
53 ms |
6468 KB |
Output is correct |
13 |
Correct |
357 ms |
162700 KB |
Output is correct |
14 |
Correct |
414 ms |
167668 KB |
Output is correct |
15 |
Correct |
1063 ms |
176928 KB |
Output is correct |
16 |
Correct |
2826 ms |
292020 KB |
Output is correct |
17 |
Correct |
474 ms |
200168 KB |
Output is correct |
18 |
Correct |
552 ms |
222504 KB |
Output is correct |
19 |
Correct |
454 ms |
189940 KB |
Output is correct |
20 |
Correct |
524 ms |
188264 KB |
Output is correct |
21 |
Execution timed out |
5042 ms |
566332 KB |
Time limit exceeded |
22 |
Halted |
0 ms |
0 KB |
- |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
4 ms |
5976 KB |
Output is correct |
2 |
Correct |
4 ms |
5972 KB |
Output is correct |
3 |
Correct |
6 ms |
6232 KB |
Output is correct |
4 |
Correct |
6 ms |
6228 KB |
Output is correct |
5 |
Correct |
5 ms |
6232 KB |
Output is correct |
6 |
Correct |
6 ms |
6356 KB |
Output is correct |
7 |
Correct |
5 ms |
6228 KB |
Output is correct |
8 |
Correct |
6 ms |
6236 KB |
Output is correct |
9 |
Correct |
6 ms |
6228 KB |
Output is correct |
10 |
Correct |
6 ms |
6256 KB |
Output is correct |
11 |
Correct |
4 ms |
6232 KB |
Output is correct |
12 |
Correct |
4 ms |
6228 KB |
Output is correct |
13 |
Correct |
4 ms |
6228 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
4 ms |
5976 KB |
Output is correct |
2 |
Correct |
4 ms |
5972 KB |
Output is correct |
3 |
Correct |
6 ms |
6232 KB |
Output is correct |
4 |
Correct |
6 ms |
6228 KB |
Output is correct |
5 |
Correct |
5 ms |
6232 KB |
Output is correct |
6 |
Correct |
6 ms |
6356 KB |
Output is correct |
7 |
Correct |
5 ms |
6228 KB |
Output is correct |
8 |
Correct |
6 ms |
6236 KB |
Output is correct |
9 |
Correct |
6 ms |
6228 KB |
Output is correct |
10 |
Correct |
6 ms |
6256 KB |
Output is correct |
11 |
Correct |
4 ms |
6232 KB |
Output is correct |
12 |
Correct |
4 ms |
6228 KB |
Output is correct |
13 |
Correct |
4 ms |
6228 KB |
Output is correct |
14 |
Correct |
3 ms |
5972 KB |
Output is correct |
15 |
Correct |
4 ms |
5972 KB |
Output is correct |
16 |
Correct |
6 ms |
6236 KB |
Output is correct |
17 |
Correct |
6 ms |
6308 KB |
Output is correct |
18 |
Correct |
5 ms |
6228 KB |
Output is correct |
19 |
Correct |
4 ms |
5968 KB |
Output is correct |
20 |
Correct |
6 ms |
6224 KB |
Output is correct |
21 |
Correct |
6 ms |
6320 KB |
Output is correct |
22 |
Correct |
5 ms |
6236 KB |
Output is correct |
23 |
Correct |
4 ms |
5968 KB |
Output is correct |
24 |
Correct |
4 ms |
6084 KB |
Output is correct |
25 |
Correct |
6 ms |
6356 KB |
Output is correct |
26 |
Correct |
4 ms |
6136 KB |
Output is correct |
27 |
Correct |
5 ms |
6300 KB |
Output is correct |
28 |
Correct |
4 ms |
5960 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
4 ms |
5976 KB |
Output is correct |
2 |
Correct |
4 ms |
5972 KB |
Output is correct |
3 |
Correct |
6 ms |
6232 KB |
Output is correct |
4 |
Correct |
6 ms |
6228 KB |
Output is correct |
5 |
Correct |
5 ms |
6232 KB |
Output is correct |
6 |
Correct |
6 ms |
6356 KB |
Output is correct |
7 |
Correct |
5 ms |
6228 KB |
Output is correct |
8 |
Correct |
6 ms |
6236 KB |
Output is correct |
9 |
Correct |
6 ms |
6228 KB |
Output is correct |
10 |
Correct |
6 ms |
6256 KB |
Output is correct |
11 |
Correct |
4 ms |
6232 KB |
Output is correct |
12 |
Correct |
4 ms |
6228 KB |
Output is correct |
13 |
Correct |
4 ms |
6228 KB |
Output is correct |
14 |
Correct |
3 ms |
5972 KB |
Output is correct |
15 |
Correct |
4 ms |
5972 KB |
Output is correct |
16 |
Correct |
6 ms |
6236 KB |
Output is correct |
17 |
Correct |
6 ms |
6308 KB |
Output is correct |
18 |
Correct |
5 ms |
6228 KB |
Output is correct |
19 |
Correct |
4 ms |
5968 KB |
Output is correct |
20 |
Correct |
6 ms |
6224 KB |
Output is correct |
21 |
Correct |
6 ms |
6320 KB |
Output is correct |
22 |
Correct |
5 ms |
6236 KB |
Output is correct |
23 |
Correct |
4 ms |
5968 KB |
Output is correct |
24 |
Correct |
4 ms |
6084 KB |
Output is correct |
25 |
Correct |
6 ms |
6356 KB |
Output is correct |
26 |
Correct |
4 ms |
6136 KB |
Output is correct |
27 |
Correct |
5 ms |
6300 KB |
Output is correct |
28 |
Correct |
4 ms |
5960 KB |
Output is correct |
29 |
Correct |
7 ms |
6356 KB |
Output is correct |
30 |
Correct |
6 ms |
6356 KB |
Output is correct |
31 |
Correct |
6 ms |
6360 KB |
Output is correct |
32 |
Correct |
7 ms |
6372 KB |
Output is correct |
33 |
Correct |
6 ms |
6336 KB |
Output is correct |
34 |
Correct |
9 ms |
6324 KB |
Output is correct |
35 |
Correct |
7 ms |
6228 KB |
Output is correct |
36 |
Correct |
6 ms |
6228 KB |
Output is correct |
37 |
Correct |
8 ms |
6240 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
4 ms |
5976 KB |
Output is correct |
2 |
Correct |
4 ms |
5972 KB |
Output is correct |
3 |
Correct |
6 ms |
6232 KB |
Output is correct |
4 |
Correct |
6 ms |
6228 KB |
Output is correct |
5 |
Correct |
5 ms |
6232 KB |
Output is correct |
6 |
Correct |
6 ms |
6356 KB |
Output is correct |
7 |
Correct |
5 ms |
6228 KB |
Output is correct |
8 |
Correct |
6 ms |
6236 KB |
Output is correct |
9 |
Correct |
6 ms |
6228 KB |
Output is correct |
10 |
Correct |
6 ms |
6256 KB |
Output is correct |
11 |
Correct |
4 ms |
6232 KB |
Output is correct |
12 |
Correct |
4 ms |
6228 KB |
Output is correct |
13 |
Correct |
4 ms |
6228 KB |
Output is correct |
14 |
Correct |
3 ms |
5972 KB |
Output is correct |
15 |
Correct |
4 ms |
5972 KB |
Output is correct |
16 |
Correct |
6 ms |
6236 KB |
Output is correct |
17 |
Correct |
6 ms |
6308 KB |
Output is correct |
18 |
Correct |
5 ms |
6228 KB |
Output is correct |
19 |
Correct |
4 ms |
5968 KB |
Output is correct |
20 |
Correct |
6 ms |
6224 KB |
Output is correct |
21 |
Correct |
6 ms |
6320 KB |
Output is correct |
22 |
Correct |
5 ms |
6236 KB |
Output is correct |
23 |
Correct |
4 ms |
5968 KB |
Output is correct |
24 |
Correct |
4 ms |
6084 KB |
Output is correct |
25 |
Correct |
6 ms |
6356 KB |
Output is correct |
26 |
Correct |
4 ms |
6136 KB |
Output is correct |
27 |
Correct |
5 ms |
6300 KB |
Output is correct |
28 |
Correct |
4 ms |
5960 KB |
Output is correct |
29 |
Correct |
7 ms |
6356 KB |
Output is correct |
30 |
Correct |
6 ms |
6356 KB |
Output is correct |
31 |
Correct |
6 ms |
6360 KB |
Output is correct |
32 |
Correct |
7 ms |
6372 KB |
Output is correct |
33 |
Correct |
6 ms |
6336 KB |
Output is correct |
34 |
Correct |
9 ms |
6324 KB |
Output is correct |
35 |
Correct |
7 ms |
6228 KB |
Output is correct |
36 |
Correct |
6 ms |
6228 KB |
Output is correct |
37 |
Correct |
8 ms |
6240 KB |
Output is correct |
38 |
Correct |
69 ms |
13304 KB |
Output is correct |
39 |
Correct |
87 ms |
74752 KB |
Output is correct |
40 |
Correct |
87 ms |
13036 KB |
Output is correct |
41 |
Correct |
108 ms |
12964 KB |
Output is correct |
42 |
Correct |
67 ms |
13168 KB |
Output is correct |
43 |
Correct |
46 ms |
10728 KB |
Output is correct |
44 |
Correct |
31 ms |
7756 KB |
Output is correct |
45 |
Correct |
131 ms |
67056 KB |
Output is correct |
46 |
Correct |
129 ms |
67088 KB |
Output is correct |
47 |
Correct |
109 ms |
71280 KB |
Output is correct |
48 |
Correct |
98 ms |
71256 KB |
Output is correct |
49 |
Correct |
98 ms |
67248 KB |
Output is correct |
50 |
Correct |
95 ms |
67300 KB |
Output is correct |
51 |
Correct |
85 ms |
66892 KB |
Output is correct |
52 |
Correct |
104 ms |
66812 KB |
Output is correct |
53 |
Correct |
28 ms |
13584 KB |
Output is correct |
54 |
Correct |
158 ms |
67140 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
4 ms |
5972 KB |
Output is correct |
2 |
Correct |
4 ms |
5972 KB |
Output is correct |
3 |
Correct |
4 ms |
5972 KB |
Output is correct |
4 |
Correct |
4 ms |
5968 KB |
Output is correct |
5 |
Correct |
13 ms |
6100 KB |
Output is correct |
6 |
Correct |
4 ms |
6228 KB |
Output is correct |
7 |
Correct |
4 ms |
6228 KB |
Output is correct |
8 |
Correct |
3 ms |
5972 KB |
Output is correct |
9 |
Correct |
3 ms |
5972 KB |
Output is correct |
10 |
Correct |
3 ms |
6092 KB |
Output is correct |
11 |
Correct |
4 ms |
5964 KB |
Output is correct |
12 |
Correct |
7 ms |
6228 KB |
Output is correct |
13 |
Correct |
36 ms |
6516 KB |
Output is correct |
14 |
Correct |
60 ms |
6364 KB |
Output is correct |
15 |
Correct |
48 ms |
6356 KB |
Output is correct |
16 |
Correct |
265 ms |
87668 KB |
Output is correct |
17 |
Correct |
1428 ms |
174728 KB |
Output is correct |
18 |
Correct |
2988 ms |
271524 KB |
Output is correct |
19 |
Correct |
619 ms |
108432 KB |
Output is correct |
20 |
Correct |
443 ms |
108944 KB |
Output is correct |
21 |
Correct |
602 ms |
108980 KB |
Output is correct |
22 |
Correct |
1326 ms |
175768 KB |
Output is correct |
23 |
Correct |
813 ms |
175900 KB |
Output is correct |
24 |
Correct |
1024 ms |
176928 KB |
Output is correct |
25 |
Correct |
806 ms |
176672 KB |
Output is correct |
26 |
Correct |
1016 ms |
177632 KB |
Output is correct |
27 |
Correct |
2444 ms |
222716 KB |
Output is correct |
28 |
Correct |
1952 ms |
228244 KB |
Output is correct |
29 |
Correct |
1830 ms |
216460 KB |
Output is correct |
30 |
Correct |
1305 ms |
160224 KB |
Output is correct |
31 |
Correct |
888 ms |
162460 KB |
Output is correct |
32 |
Correct |
1232 ms |
157808 KB |
Output is correct |
33 |
Correct |
879 ms |
160588 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
3 ms |
5972 KB |
Output is correct |
2 |
Correct |
3 ms |
5972 KB |
Output is correct |
3 |
Correct |
3 ms |
5972 KB |
Output is correct |
4 |
Correct |
15 ms |
6432 KB |
Output is correct |
5 |
Correct |
30 ms |
6332 KB |
Output is correct |
6 |
Correct |
4 ms |
6228 KB |
Output is correct |
7 |
Correct |
4 ms |
6228 KB |
Output is correct |
8 |
Correct |
6 ms |
6356 KB |
Output is correct |
9 |
Correct |
53 ms |
13048 KB |
Output is correct |
10 |
Correct |
76 ms |
74472 KB |
Output is correct |
11 |
Correct |
11 ms |
6192 KB |
Output is correct |
12 |
Correct |
53 ms |
6468 KB |
Output is correct |
13 |
Correct |
357 ms |
162700 KB |
Output is correct |
14 |
Correct |
414 ms |
167668 KB |
Output is correct |
15 |
Correct |
1063 ms |
176928 KB |
Output is correct |
16 |
Correct |
2826 ms |
292020 KB |
Output is correct |
17 |
Correct |
474 ms |
200168 KB |
Output is correct |
18 |
Correct |
552 ms |
222504 KB |
Output is correct |
19 |
Correct |
454 ms |
189940 KB |
Output is correct |
20 |
Correct |
524 ms |
188264 KB |
Output is correct |
21 |
Execution timed out |
5042 ms |
566332 KB |
Time limit exceeded |
22 |
Halted |
0 ms |
0 KB |
- |