#include <bits/stdc++.h>
#define pb push_back
#define int long long
#define endl '\n'
using namespace std;
const int N=2e5+5,inf=2e8,MOD=1e9+9;
vector<int> adj[N],vec;
bool vis[N];
bool dfs(int node,int goal){
if(node==goal){
vec.pb(node);
return 1;
}
vis[node]=1;
for(auto i:adj[node]){
if(!vis[i]){
bool flag=dfs(i,goal);
if(flag){
vec.pb(i);
return 1;
}
}
}
return 0;
}
signed main(){
ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
int t; cin>>t;
while(t--){
int n; cin>>n;
vec.clear();
for(int i=1;i<=n;i++){
adj[i].clear();
vis[i]=0;
}
for(int i=0;i<n-1;i++){
int x,y; cin>>x>>y;
adj[x].pb(y);
adj[y].pb(x);
}
int m; cin>>m;
pair<int,int> p[m];
for(int i=0;i<m;i++){
cin>>p[i].first>>p[i].second;
}
vec.pb(p[0].first);
dfs(p[0].first,p[0].second);
for(int i=1;i<=n;i++)vis[i]=0;
vector<int> vec2=vec;
vec.clear();
vec.pb(p[1].first);
dfs(p[1].first,p[1].second);
bool flag1=1,flag2=1;
for(auto i:vec){
if(i==p[0].first)flag1=0;
}
for(auto i:vec2){
if(i==p[1].second)flag1=0;
}
swap(vec,vec2);
for(auto i:vec){
if(i==p[1].first)flag2=0;
}
for(auto i:vec2){
if(i==p[0].second)flag2=0;
}
cout<<(flag1 || flag2?"Yes":"No")<<endl;
}
}
# | 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... |