제출 #636187

#제출 시각아이디문제언어결과실행 시간메모리
636187Yazan_AlattarJail (JOI22_jail)C++14
0 / 100
12 ms9760 KiB
#include <bits/stdc++.h> using namespace std; typedef long long ll; typedef unsigned long long ull; #define F first #define S second #define pb push_back #define endl "\n" #define all(x) x.begin(), x.end() const int M = 200007; const ll inf = 1e9; const ll INF = 1e18; const ll mod = 1e9 + 7; const double pi = acos(-1); const double eps = 1e-6; const int dx[] = {0, -1, 0, 1}, dy[] = {1, 0, -1, 0}; const int block = 320; vector <int> adj[M], to[M]; int n, m, s[M], t[M], dep[M], p[M], in[M]; bool check(int i, int j){ int x = s[j], y = t[j]; while(x != y){ if(x == t[i] || y == t[i]) return 0; if(dep[x] > dep[y]) x = p[x]; else y = p[y]; } return x != t[i]; } void dfs(int node, int par){ for(auto i : adj[node]) if(i != par){ dep[i] = dep[node] + 1; p[i] = node; dfs(i, node); } return; } int main(){ ios::sync_with_stdio(0); cin.tie(0); cout.tie(0); int q; cin >> q; while(q--){ cin >> n; for(int i = 1; i < n; ++i){ int x, y; cin >> x >> y; adj[x].pb(y); adj[y].pb(x); } dep[1] = 1; dfs(1, 0); cin >> m; for(int i = 1; i <= m; ++i) cin >> s[i] >> t[i]; for(int i = 1; i <= m; ++i) for(int j = 1; j <= m; ++j) if(i != j && !check(i, j)) to[j].pb(i), ++in[i]; queue <int> q; for(int i = 1; i <= m; ++i) if(!in[i]) q.push(i); int cnt = 0; while(!q.empty()){ int node = q.front(); q.pop(); ++cnt; for(auto i : to[node]){ --in[i]; if(!in[i]) q.push(i); } } cout << (cnt != m ? "No\n" : "Yes\n"); for(int i = 1; i <= n; ++i){ adj[i].clear(); to[i].clear(); in[i] = 0; } } 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...