#include <bits/stdc++.h>
using namespace std;
const int maxver=1e6;
const int maxn=500000;
int q,n,m;
vector<int> f[maxn];
void read()
{
cin>>n;
for(int i=1; i<=n; i++)
f[i].clear();
for(int i=1; i<n; i++)
{
int x,y;
cin>>x>>y;
f[x].push_back(y);
f[y].push_back(x);
}
cin>>m;
}
int num;
int ts[4*maxn];
int te[4*maxn];
int dw[maxn];
int up[maxn];
vector<int> v[maxver],o[maxver];
void add_edge(int x,int y)
{
v[x].push_back(y);
o[y].push_back(x);
}
void make_tree(int i,int l,int r)
{
if(l==r)
{
ts[i]=num++;
te[i]=num++;
//cout<<ts[i]<<" "<<te[i]<<" "<<l<<" "<<r<<endl;
dw[l]=ts[i];
up[l]=te[i];
return;
}
ts[i]=num++;
te[i]=num++;
//cout<<ts[i]<<" "<<te[i]<<" "<<l<<" "<<r<<endl;
int mid=(l+r)/2;
make_tree(i*2,l,mid);
make_tree(i*2+1,mid+1,r);
add_edge(ts[i],ts[i*2]);
add_edge(ts[i],ts[i*2+1]);
add_edge(te[i*2],te[i]);
add_edge(te[i*2+1],te[i]);
}
int used[maxn];
int sz[maxn];
void size_(int i)
{
used[i]=1;
sz[i]=1;
for(int j=0; j<f[i].size(); j++)
{
int nb=f[i][j];
if(!used[nb])
{
size_(nb);
sz[i]+=sz[nb];
}
}
}
int jump[maxn][21];
int pos[maxn];
int chain[maxn];
int lvl[maxn];
int cnt=1;
void hld(int i,int lead,int level,int par)
{
pos[i]=cnt++;
chain[i]=lead;
lvl[i]=level;
int maxx=0,big=0;
for(int j=0; j<f[i].size(); j++)
{
int nb=f[i][j];
if(sz[nb]>maxx&&nb!=par)
{
maxx=sz[nb];
big=nb;
}
}
if(big)
{
//cout<<"here "<<i<<" "<<lead<<" "<<ver<<endl;
hld(big,lead,level+1,i);
jump[big][0]=i;
}
for(int j=0; j<f[i].size(); j++)
{
int nb=f[i][j];
if(nb!=big&&nb!=par)
{
hld(nb,nb,level+1,i);
jump[nb][0]=i;
}
}
}
void prec()
{
for(int j=1; j<=20; j++)
for(int i=1; i<=n; i++)
jump[i][j]=jump[jump[i][j-1]][j-1];
}
int make_jump(int x,int k)
{
for(int i=20; i>=0; i--)
if(k&(1<<i))x=jump[x][i];
return x;
}
int lca(int x,int y)
{
if(lvl[x]<lvl[y])swap(x,y);
x=make_jump(x,abs(lvl[x]-lvl[y]));
if(x==y)return x;
for(int i=20; i>=0; i--)
{
if(jump[x][i]!=jump[y][i])
{
x=jump[x][i];
y=jump[y][i];
}
}
return jump[x][0];
}
void update(int i,int l,int r,int ql,int qr,int pr)
{
if(ql>qr||r<ql||l>qr)return;
if(ql<=l&&r<=qr)
{
add_edge(pr,ts[i]);
add_edge(te[i],pr);
return;
}
int mid=(l+r)/2;
update(i*2,l,mid,ql,qr,pr);
update(i*2+1,mid+1,r,ql,qr,pr);
}
void make_graph()
{
for(int i=1; i<=m; i++)
{
int x,y;
cin>>x>>y;
add_edge(dw[pos[x]],i);
add_edge(i,up[pos[y]]);
int st,lca_=lca(x,y);
//cout<<lca_<<endl;
st=x;
while(true)
{
int ed=chain[st];
if(lvl[ed]<lvl[lca_])ed=lca_;
update(1,1,n,pos[ed],pos[st],i);
//cout<<pos[ed]<<" "<<pos[st]<<endl;
if(ed==lca_)break;
st=jump[ed][0];
}
st=y;
while(true)
{
int ed=chain[st];
if(lvl[ed]<lvl[lca_])ed=lca_;
update(1,1,n,pos[ed],pos[st],i);
//cout<<pos[ed]<<" "<<pos[st]<<endl;
if(ed==lca_)break;
st=jump[ed][0];
}
}
}
int comp;
stack<int> topo;
int used1[maxn];
int used2[maxn];
void dfs1(int i)
{
used1[i]=1;
for(int j=0; j<v[i].size(); j++)
{
int nb=v[i][j];
if(!used1[nb])
dfs1(nb);
}
topo.push(i);
}
void dfs2(int i)
{
used2[i]=comp;
for(int j=0; j<o[i].size(); j++)
{
int nb=o[i][j];
if(!used2[nb])
dfs2(nb);
}
}
map<int,int> mp;
void check()
{
mp.clear();
for(int i=1; i<=m; i++)
if(!used1[i])dfs1(i);
comp=0;
while(topo.size())
{
int ver=topo.top();
topo.pop();
if(!used2[ver])
{
comp++;
dfs2(ver);
}
}
//cout<<comp<<" "<<num<<endl;
bool ans=1;
for(int i=1;i<=m;i++)
{
mp[used2[i]]++;
if(mp[used2[i]]>1)ans=0;
}
if(ans)cout<<"Yes"<<endl;
else cout<<"No"<<endl;
}
int main()
{
ios_base::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
cin>>q;
while(q--)
{
read();
for(int i=1; i<maxver; i++)
{
v[i].clear();
o[i].clear();
}
memset(used,0,sizeof(used));
memset(pos,0,sizeof(pos));
memset(used1,0,sizeof(used1));
memset(used2,0,sizeof(used2));
memset(chain,0,sizeof(chain));
memset(ts,0,sizeof(ts));
memset(te,0,sizeof(te));
memset(sz,0,sizeof(sz));
memset(dw,0,sizeof(dw));
memset(up,0,sizeof(up));
memset(lvl,0,sizeof(lvl));
for(int i=1; i<=n; i++)
for(int j=0; j<=20; j++)
jump[i][j]=0;
size_(1);
cnt=1;
hld(1,1,1,-1);
prec();
num=m+1;
make_tree(1,1,n);
make_graph();
/*for(int i=1;i<num;i++)
{
cout<<i<<": ";
for(int j=0;j<v[i].size();j++)
{
cout<<v[i][j]<<" ";
}
cout<<endl;
}*/
check();
}
return 0;
}
/*
1
6
2 4
4 1
1 5
5 3
3 6
2
2 3
6 1
*/
Compilation message
jail.cpp: In function 'void size_(int)':
jail.cpp:70:19: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
70 | for(int j=0; j<f[i].size(); j++)
| ~^~~~~~~~~~~~
jail.cpp: In function 'void hld(int, int, int, int)':
jail.cpp:95:19: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
95 | for(int j=0; j<f[i].size(); j++)
| ~^~~~~~~~~~~~
jail.cpp:112:19: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
112 | for(int j=0; j<f[i].size(); j++)
| ~^~~~~~~~~~~~
jail.cpp: In function 'void dfs1(int)':
jail.cpp:214:19: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
214 | for(int j=0; j<v[i].size(); j++)
| ~^~~~~~~~~~~~
jail.cpp: In function 'void dfs2(int)':
jail.cpp:226:19: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
226 | for(int j=0; j<o[i].size(); j++)
| ~^~~~~~~~~~~~
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
32 ms |
94288 KB |
Output is correct |
2 |
Correct |
30 ms |
94300 KB |
Output is correct |
3 |
Correct |
21 ms |
94300 KB |
Output is correct |
4 |
Correct |
2285 ms |
94804 KB |
Output is correct |
5 |
Correct |
4853 ms |
94560 KB |
Output is correct |
6 |
Correct |
113 ms |
94556 KB |
Output is correct |
7 |
Correct |
114 ms |
94596 KB |
Output is correct |
8 |
Correct |
116 ms |
94556 KB |
Output is correct |
9 |
Correct |
167 ms |
96596 KB |
Output is correct |
10 |
Correct |
118 ms |
141728 KB |
Output is correct |
11 |
Correct |
4885 ms |
94528 KB |
Output is correct |
12 |
Execution timed out |
5049 ms |
94676 KB |
Time limit exceeded |
13 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
21 ms |
94300 KB |
Output is correct |
2 |
Correct |
21 ms |
94300 KB |
Output is correct |
3 |
Correct |
114 ms |
94576 KB |
Output is correct |
4 |
Correct |
122 ms |
94580 KB |
Output is correct |
5 |
Correct |
115 ms |
94556 KB |
Output is correct |
6 |
Correct |
116 ms |
94556 KB |
Output is correct |
7 |
Correct |
114 ms |
94552 KB |
Output is correct |
8 |
Correct |
117 ms |
94556 KB |
Output is correct |
9 |
Correct |
115 ms |
94552 KB |
Output is correct |
10 |
Correct |
113 ms |
94552 KB |
Output is correct |
11 |
Correct |
100 ms |
94572 KB |
Output is correct |
12 |
Correct |
114 ms |
94556 KB |
Output is correct |
13 |
Correct |
116 ms |
94564 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
21 ms |
94300 KB |
Output is correct |
2 |
Correct |
21 ms |
94300 KB |
Output is correct |
3 |
Correct |
114 ms |
94576 KB |
Output is correct |
4 |
Correct |
122 ms |
94580 KB |
Output is correct |
5 |
Correct |
115 ms |
94556 KB |
Output is correct |
6 |
Correct |
116 ms |
94556 KB |
Output is correct |
7 |
Correct |
114 ms |
94552 KB |
Output is correct |
8 |
Correct |
117 ms |
94556 KB |
Output is correct |
9 |
Correct |
115 ms |
94552 KB |
Output is correct |
10 |
Correct |
113 ms |
94552 KB |
Output is correct |
11 |
Correct |
100 ms |
94572 KB |
Output is correct |
12 |
Correct |
114 ms |
94556 KB |
Output is correct |
13 |
Correct |
116 ms |
94564 KB |
Output is correct |
14 |
Correct |
26 ms |
94488 KB |
Output is correct |
15 |
Correct |
30 ms |
94524 KB |
Output is correct |
16 |
Correct |
116 ms |
94560 KB |
Output is correct |
17 |
Correct |
118 ms |
94556 KB |
Output is correct |
18 |
Correct |
112 ms |
94528 KB |
Output is correct |
19 |
Correct |
112 ms |
94296 KB |
Output is correct |
20 |
Correct |
116 ms |
94580 KB |
Output is correct |
21 |
Correct |
115 ms |
94556 KB |
Output is correct |
22 |
Correct |
115 ms |
94588 KB |
Output is correct |
23 |
Correct |
110 ms |
94300 KB |
Output is correct |
24 |
Correct |
117 ms |
94528 KB |
Output is correct |
25 |
Correct |
121 ms |
94556 KB |
Output is correct |
26 |
Correct |
113 ms |
94532 KB |
Output is correct |
27 |
Correct |
116 ms |
94556 KB |
Output is correct |
28 |
Correct |
114 ms |
94300 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
21 ms |
94300 KB |
Output is correct |
2 |
Correct |
21 ms |
94300 KB |
Output is correct |
3 |
Correct |
114 ms |
94576 KB |
Output is correct |
4 |
Correct |
122 ms |
94580 KB |
Output is correct |
5 |
Correct |
115 ms |
94556 KB |
Output is correct |
6 |
Correct |
116 ms |
94556 KB |
Output is correct |
7 |
Correct |
114 ms |
94552 KB |
Output is correct |
8 |
Correct |
117 ms |
94556 KB |
Output is correct |
9 |
Correct |
115 ms |
94552 KB |
Output is correct |
10 |
Correct |
113 ms |
94552 KB |
Output is correct |
11 |
Correct |
100 ms |
94572 KB |
Output is correct |
12 |
Correct |
114 ms |
94556 KB |
Output is correct |
13 |
Correct |
116 ms |
94564 KB |
Output is correct |
14 |
Correct |
26 ms |
94488 KB |
Output is correct |
15 |
Correct |
30 ms |
94524 KB |
Output is correct |
16 |
Correct |
116 ms |
94560 KB |
Output is correct |
17 |
Correct |
118 ms |
94556 KB |
Output is correct |
18 |
Correct |
112 ms |
94528 KB |
Output is correct |
19 |
Correct |
112 ms |
94296 KB |
Output is correct |
20 |
Correct |
116 ms |
94580 KB |
Output is correct |
21 |
Correct |
115 ms |
94556 KB |
Output is correct |
22 |
Correct |
115 ms |
94588 KB |
Output is correct |
23 |
Correct |
110 ms |
94300 KB |
Output is correct |
24 |
Correct |
117 ms |
94528 KB |
Output is correct |
25 |
Correct |
121 ms |
94556 KB |
Output is correct |
26 |
Correct |
113 ms |
94532 KB |
Output is correct |
27 |
Correct |
116 ms |
94556 KB |
Output is correct |
28 |
Correct |
114 ms |
94300 KB |
Output is correct |
29 |
Correct |
115 ms |
94632 KB |
Output is correct |
30 |
Correct |
117 ms |
94552 KB |
Output is correct |
31 |
Correct |
117 ms |
94480 KB |
Output is correct |
32 |
Correct |
117 ms |
94572 KB |
Output is correct |
33 |
Correct |
112 ms |
94556 KB |
Output is correct |
34 |
Correct |
121 ms |
94552 KB |
Output is correct |
35 |
Correct |
121 ms |
94556 KB |
Output is correct |
36 |
Correct |
115 ms |
94604 KB |
Output is correct |
37 |
Correct |
115 ms |
94524 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
21 ms |
94300 KB |
Output is correct |
2 |
Correct |
21 ms |
94300 KB |
Output is correct |
3 |
Correct |
114 ms |
94576 KB |
Output is correct |
4 |
Correct |
122 ms |
94580 KB |
Output is correct |
5 |
Correct |
115 ms |
94556 KB |
Output is correct |
6 |
Correct |
116 ms |
94556 KB |
Output is correct |
7 |
Correct |
114 ms |
94552 KB |
Output is correct |
8 |
Correct |
117 ms |
94556 KB |
Output is correct |
9 |
Correct |
115 ms |
94552 KB |
Output is correct |
10 |
Correct |
113 ms |
94552 KB |
Output is correct |
11 |
Correct |
100 ms |
94572 KB |
Output is correct |
12 |
Correct |
114 ms |
94556 KB |
Output is correct |
13 |
Correct |
116 ms |
94564 KB |
Output is correct |
14 |
Correct |
26 ms |
94488 KB |
Output is correct |
15 |
Correct |
30 ms |
94524 KB |
Output is correct |
16 |
Correct |
116 ms |
94560 KB |
Output is correct |
17 |
Correct |
118 ms |
94556 KB |
Output is correct |
18 |
Correct |
112 ms |
94528 KB |
Output is correct |
19 |
Correct |
112 ms |
94296 KB |
Output is correct |
20 |
Correct |
116 ms |
94580 KB |
Output is correct |
21 |
Correct |
115 ms |
94556 KB |
Output is correct |
22 |
Correct |
115 ms |
94588 KB |
Output is correct |
23 |
Correct |
110 ms |
94300 KB |
Output is correct |
24 |
Correct |
117 ms |
94528 KB |
Output is correct |
25 |
Correct |
121 ms |
94556 KB |
Output is correct |
26 |
Correct |
113 ms |
94532 KB |
Output is correct |
27 |
Correct |
116 ms |
94556 KB |
Output is correct |
28 |
Correct |
114 ms |
94300 KB |
Output is correct |
29 |
Correct |
115 ms |
94632 KB |
Output is correct |
30 |
Correct |
117 ms |
94552 KB |
Output is correct |
31 |
Correct |
117 ms |
94480 KB |
Output is correct |
32 |
Correct |
117 ms |
94572 KB |
Output is correct |
33 |
Correct |
112 ms |
94556 KB |
Output is correct |
34 |
Correct |
121 ms |
94552 KB |
Output is correct |
35 |
Correct |
121 ms |
94556 KB |
Output is correct |
36 |
Correct |
115 ms |
94604 KB |
Output is correct |
37 |
Correct |
115 ms |
94524 KB |
Output is correct |
38 |
Correct |
164 ms |
96608 KB |
Output is correct |
39 |
Correct |
122 ms |
141684 KB |
Output is correct |
40 |
Correct |
190 ms |
96848 KB |
Output is correct |
41 |
Correct |
184 ms |
96836 KB |
Output is correct |
42 |
Correct |
165 ms |
96976 KB |
Output is correct |
43 |
Correct |
147 ms |
96036 KB |
Output is correct |
44 |
Correct |
138 ms |
95540 KB |
Output is correct |
45 |
Correct |
133 ms |
131412 KB |
Output is correct |
46 |
Correct |
136 ms |
131264 KB |
Output is correct |
47 |
Correct |
117 ms |
136272 KB |
Output is correct |
48 |
Correct |
123 ms |
136316 KB |
Output is correct |
49 |
Correct |
124 ms |
131552 KB |
Output is correct |
50 |
Correct |
124 ms |
131668 KB |
Output is correct |
51 |
Correct |
110 ms |
132688 KB |
Output is correct |
52 |
Correct |
110 ms |
132648 KB |
Output is correct |
53 |
Correct |
134 ms |
98644 KB |
Output is correct |
54 |
Correct |
124 ms |
131148 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
21 ms |
94296 KB |
Output is correct |
2 |
Correct |
25 ms |
94300 KB |
Output is correct |
3 |
Correct |
30 ms |
94300 KB |
Output is correct |
4 |
Correct |
21 ms |
94300 KB |
Output is correct |
5 |
Correct |
4776 ms |
94552 KB |
Output is correct |
6 |
Correct |
113 ms |
94556 KB |
Output is correct |
7 |
Correct |
114 ms |
94540 KB |
Output is correct |
8 |
Correct |
109 ms |
94296 KB |
Output is correct |
9 |
Correct |
111 ms |
94300 KB |
Output is correct |
10 |
Correct |
120 ms |
94544 KB |
Output is correct |
11 |
Correct |
114 ms |
94300 KB |
Output is correct |
12 |
Correct |
114 ms |
94552 KB |
Output is correct |
13 |
Correct |
4881 ms |
94852 KB |
Output is correct |
14 |
Correct |
4902 ms |
94848 KB |
Output is correct |
15 |
Correct |
4954 ms |
94848 KB |
Output is correct |
16 |
Correct |
235 ms |
135204 KB |
Output is correct |
17 |
Runtime error |
489 ms |
309772 KB |
Execution killed with signal 11 |
18 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
32 ms |
94288 KB |
Output is correct |
2 |
Correct |
30 ms |
94300 KB |
Output is correct |
3 |
Correct |
21 ms |
94300 KB |
Output is correct |
4 |
Correct |
2285 ms |
94804 KB |
Output is correct |
5 |
Correct |
4853 ms |
94560 KB |
Output is correct |
6 |
Correct |
113 ms |
94556 KB |
Output is correct |
7 |
Correct |
114 ms |
94596 KB |
Output is correct |
8 |
Correct |
116 ms |
94556 KB |
Output is correct |
9 |
Correct |
167 ms |
96596 KB |
Output is correct |
10 |
Correct |
118 ms |
141728 KB |
Output is correct |
11 |
Correct |
4885 ms |
94528 KB |
Output is correct |
12 |
Execution timed out |
5049 ms |
94676 KB |
Time limit exceeded |
13 |
Halted |
0 ms |
0 KB |
- |