답안 #891009

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
891009 2023-12-22T06:10:28 Z Minbaev Jail (JOI22_jail) C++17
0 / 100
6 ms 19036 KB
#include <bits/stdc++.h>
#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/tree_policy.hpp>
#pragma GCC target("avx,avx2,fma")
#pragma GCC optimize("Ofast,unroll-loops")
#define pii pair<int,int>
using namespace __gnu_pbds;
using namespace std;
#define pb push_back
#define all(x) x.begin(),x.end()
#define rall(x) x.rbegin(),x.rend()
#define int long long
#define f first
#define s second
#define pii pair<int,int>
template<class T>bool umax(T &a,T b){if(a<b){a=b;return true;}return false;}
template<class T>bool umin(T &a,T b){if(b<a){a=b;return true;}return false;}
typedef tree<int, null_type, less_equal<int>, rb_tree_tag,
	tree_order_statistics_node_update> ordered_set;
const int mod= 1e9 +7;
const int N=1e5*4;

int binpow (int a, int n) {
	if (n == 0)
		return 1;
	if (n % 2 == 1)
		return binpow (a, n-1) * a;
	else {
		int b = binpow (a, n/2);
		return b * b;
	}
}
	vector<int>v[N],pred(N);
	vector<int>col(N),vis(N);
	
	void dfs(int x,int pr){
		vis[x] = 1;
		for(auto to:v[x]){
			if(to==pr||col[to])continue;
			dfs(to,x);
		}
			
	}
	
void solve(){
	
	int n,m,k;
	
	cin>>n;
	
	for(int i = 1;i<=n;i++){
		v[i].clear();
		vis[i] = 0;
		col[i] = 0;
	}
	for(int i = 1;i<n;i++){
		int a,b;
		cin>>a>>b;
		v[a].pb(b);
		v[b].pb(a);
	}
	
	cin>>m;
	
	vector<pii>g;
	for(int i = 0;i<m;i++){
		int a,b;
		cin>>a>>b;
		g.pb({a,b});
	}
	
	if(m>=6){
		vector<int>ind;
		for(int i = 0;i<m;i++)ind.pb(i);

		do
		{
			//~ cout<<1<<endl;
			for(int i = 1;i<=n;i++)col[i] = 0;
			for(auto to:g){
				col[to.f] += 1;
			}
			//~ cout<<1<<endl;
			bool flag = true;
			for(auto to:ind){
				//~ cout<<1<<endl;
				int a = g[to].f;
				int b = g[to].s;
				//~ cout<<to<<endl;
				col[a]--;
				for(int i = 1;i<=n;i++)vis[i] = 0;
				if(col[a]>=1){
					//~ cout<<ind[0]<<"-\n";
					flag = false;
					break;
				}
				//~ if(ind[0]==2&&ind[1]==1)
				//~ cout<<col[b]<<endl;
				dfs(a,-1);
				//~ cout<<to<<endl;
				
				col[b] ++;
				if(vis[b]==0){
					//~ cout<<ind[0]<<"=\n";
					flag = false;
					break;
				}
			}
			if(flag){
				//~ for(auto to:ind)cout<<to<<" ";
				cout<<"Yes\n";
				return;
			}
			
			
		} while (next_permutation(all(ind)));
		
		cout<<"No\n";
	}
	else{
		
		for(int i = 0;i<m;i++){
			int l = min(g[i].f,g[i].s);
			int r = max(g[i].f,g[i].s);
			for(int j = 0;j<m;j++){
				if(i==j)continue;
				if(l<=g[i].f&&g[i].f<=r){
					cout<<"No\n";
					return;
				}
			}
		}
		cout<<"Yes\n";
		
		
	}


}

 signed main()
{
//	freopen("seq.in", "r", stdin);
//  freopen("seq.out", "w", stdout);
	ios_base::sync_with_stdio(0);cin.tie(NULL);cout.tie(NULL);
	int tt=1;cin>>tt;
	while(tt--)solve();

}
	

Compilation message

jail.cpp: In function 'void solve()':
jail.cpp:47:10: warning: unused variable 'k' [-Wunused-variable]
   47 |  int n,m,k;
      |          ^
# 결과 실행 시간 메모리 Grader output
1 Incorrect 5 ms 19036 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 6 ms 19036 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 6 ms 19036 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 6 ms 19036 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 6 ms 19036 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 6 ms 19036 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 5 ms 19036 KB Output isn't correct
2 Halted 0 ms 0 KB -