Submission #551824

#TimeUsernameProblemLanguageResultExecution timeMemory
551824kshitij_sodaniJail (JOI22_jail)C++14
49 / 100
3499 ms1048576 KiB
#include <bits/stdc++.h>
using namespace std;
typedef long long llo;
#define a first
#define b second
#define pb push_back
#define endl '\n'
const llo mod=1e9+7;

int q;
int ee;
vector<int> adj[200001];
int cc[200001];
int dd[200001];
int vis[200001];
vector<int> ss;
vector<int> tt;
vector<int> pre[501];
map<int,int> ind[501];
int ind2[200001];
int ind3[200001];
vector<int> adj2[200001];
int vis2[200001];
int vis3[200001];
void dfs(int no,int par=-1){
	ss.pb(no);
	if(ee==no){
		tt=ss;

	}
	for(auto j:adj[no]){
		if(j!=par){
			dfs(j,no);
		}
	}
	ss.pop_back();
}
int stt=1;
void dfs2(int no){
	vis2[no]=1;
	vis3[no]=1;

	for(auto j:adj2[no]){
		if(vis3[j]==1){
			stt=0;
		}
		if(vis2[j]==0){
			dfs2(j);
		}
	}
	vis3[no]=0;
}
int main(){
	ios_base::sync_with_stdio(false);
	cin.tie(NULL);
	cin>>q;
	while(q--){
		int n;
		cin>>n;
		for(int i=0;i<n;i++){
			adj[i].clear();
			adj2[i].clear();
		}
		for(int i=0;i<n-1;i++){
			int aa,bb;
			cin>>aa>>bb;
			aa--;
			bb--;
			adj[aa].pb(bb);
			adj[bb].pb(aa);
		}
		int m;
		cin>>m;
		stt=1;
		for(int i=0;i<n;i++){
			ind2[i]=-1;
			ind3[i]=-1;
		}
		for(int i=0;i<m;i++){
			cin>>cc[i]>>dd[i];
			ind[i].clear();
			cc[i]--;
			dd[i]--;
			ind2[dd[i]]=i;
			ind3[cc[i]]=i;
			ee=dd[i];
			dfs(cc[i]);
			pre[i]=tt;
			for(auto j:tt){
				ind[i][j]++;
			}
			
		}
		for(int i=0;i<m;i++){
			for(auto j:pre[i]){
				if(ind3[j]>=0 and ind3[j]!=i){
					adj2[i].pb(ind3[j]);
					//cout<<i<<":"<<ind3[j]<<endl;
				}
				if(ind2[j]>=0 and ind2[j]!=i){
					adj2[ind2[j]].pb(i);
				//	cout<<ind2[j]<<":"<<i<<endl;
				}
			}
		}
		for(int i=0;i<m;i++){
			vis2[i]=0;
		}
		for(int i=0;i<m;i++){
			if(vis2[i]==0){
				dfs2(i);
			}
		}
		if(stt==0){
			cout<<"No"<<endl;
		}
		else{
			cout<<"Yes"<<endl;
		}

	/*	string ans="No";
		vector<int> ss;
		for(int i=0;i<m;i++){
			ss.pb(i);
		}
		while(true){
			for(int j=0;j<n;j++){
				vis[j]=0;
			}
			for(int j=0;j<m;j++){
				vis[cc[j]]=1;
			}
			int ok=0;
			for(auto j:ss){
				vis[cc[j]]=0;
				for(auto i:pre[j]){
					if(vis[i]==1){
						ok++;
					}
				}
				vis[dd[j]]=1;
			}
			if(ok==0){
				ans="Yes";
			}

			if(next_permutation(ss.begin(),ss.end())){

			}
			else{
				break;
			}
		}
		cout<<ans<<endl;*/
		/*for(int i=0;i<m;i++){
			for(int j=0;j<m;j++){
				int co=0;
				if(i==j){
					continue;
				}
				if(ind[j].find(cc[i])!=ind[j].end()){
					if(ind[j].find(dd[i])!=ind[j].end()){
						ans="No";
					}
				}
				for(auto jj:pre[j]){
					if(ind[i].find(dd[j]))
				}
				if(ind[j].find(dd[i])!=ind[j].end()){
					if(ind[i].find(pre[j].back())!=ind[i].end()){
						ans="No";
						break;
					}
				}
			}
		}*/
	//	cout<<ans<<endl;
	}






	return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...