답안 #891010

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
891010 2023-12-22T06:11:58 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:11: warning: unused variable 'k' [-Wunused-variable]
   47 |   int n,m,k;
      |           ^
# 결과 실행 시간 메모리 Grader output
1 Correct 6 ms 19036 KB Output is correct
2 Incorrect 6 ms 19036 KB Output isn't correct
3 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 5 ms 19036 KB Output is correct
2 Incorrect 5 ms 19036 KB Output isn't correct
3 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 5 ms 19036 KB Output is correct
2 Incorrect 5 ms 19036 KB Output isn't correct
3 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 5 ms 19036 KB Output is correct
2 Incorrect 5 ms 19036 KB Output isn't correct
3 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 5 ms 19036 KB Output is correct
2 Incorrect 5 ms 19036 KB Output isn't correct
3 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 5 ms 19036 KB Output is correct
2 Incorrect 5 ms 19032 KB Output isn't correct
3 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 6 ms 19036 KB Output is correct
2 Incorrect 6 ms 19036 KB Output isn't correct
3 Halted 0 ms 0 KB -