#include <bits/stdc++.h>
using namespace std;
unordered_set<int>nodes;
unordered_set<int>fin;
void dfs(int st, vector<int>g[], int p, int t){
nodes.insert(st);
if(st==t){
for(int i : nodes){
fin.insert(i);
}
nodes.erase(st);
return;
}
for(int i : g[st]){
if(i==p)
continue;
if(fin.size())
break;
dfs(i,g,st,t);
}
nodes.erase(st);
}
bool cyc;
void checkcyc(int st, vector<int>g[], int vis[]){
vis[st]=1;
for(int i : g[st]){
if(vis[i]==1){
cyc=1;
}
if(vis[i])
continue;
checkcyc(i,g,vis);
}
vis[st]=2;
}
void solve(){
int n;
cin >> n;
vector<int>g[n];
for(int i = 0;i<n-1;i++){
int a,b;
cin >> a >> b;
a--;b--;
g[a].push_back(b);
g[b].push_back(a);
}
int m;
cin >> m;
int s[m],t[m];
int revs[n],revt[n];
fill(revs,revs+n,-1);
fill(revt,revt+n,-1);
for(int i = 0;i<m;i++){
cin >> s[i] >> t[i];
s[i]--;
t[i]--;
revs[s[i]]=i;
revt[t[i]]=i;
}
set<int>path[m];
fin.clear();
for(int i = 0;i<m;i++){
dfs(s[i],g,-1,t[i]);
for(int j : fin){
path[i].insert(j);
}
fin.clear();
}
vector<int>g2[m];
for(int i = 0;i<m;i++){
set<int>starts;
set<int>ends;
for(int j : path[i]){
if(!(revs[j]==-1||revs[j]==i)){
//start point of smth
starts.insert(revs[j]);
}
if(!(revt[j]==-1||revt[j]==i)){
//end point of smth
ends.insert(revt[j]);
if(starts.find(revt[j])!=starts.end()){
//both in this path, so bad
cout << "No\n";
return;
}
}
}
for(int j : ends){
g2[i].push_back(j);
}
for(int j : starts){
//j must be before i
g2[j].push_back(i);
}
}
//now check for cycle.
cyc=0;
int vis[m];
fill(vis,vis+m,0);
for(int i = 0;i<m;i++){
if(vis[i]==0){
checkcyc(i,g2,vis);
}
}
for(bool i : vis){
if(!i){
cyc=1;
}
}
if(cyc){
cout << "No\n";
}
else{
cout << "Yes\n";
}
}
signed main(){
ios::sync_with_stdio(0);
cin.tie(0);
int t;
cin >> t;
while(t--){
solve();
}
return 0;
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |