제출 #887643

#제출 시각아이디문제언어결과실행 시간메모리
887643TAhmed33Jail (JOI22_jail)C++98
5 / 100
2479 ms263316 KiB
#include <bits/stdc++.h> using namespace std; const int MAXN = 120025; vector <int> adj[MAXN]; vector <int> adj2[501]; int n, m; int l[501], r[501], deg[501]; vector <int> dd[MAXN]; bool dfs (int pos, int par, int c) { if (pos == r[c]) { dd[pos].push_back(c); return 1; } bool f = 0; for (auto i : adj[pos]) { if (i != par) { f |= dfs(i, pos, c); } } if (f) dd[pos].push_back(c); return f; } void reset () { for (int i = 1; i <= n; i++) { adj[i].clear(); dd[i].clear(); } } int main () { int t = 1; cin >> t; while (t--) { cin >> n; reset(); for (int i = 1; i < n; i++) { int a, b; cin >> a >> b; adj[a].push_back(b); adj[b].push_back(a); } cin >> m; for (int i = 1; i <= m; i++) { deg[i] = 0; adj2[i].clear(); } for (int i = 1; i <= m; i++) { cin >> l[i] >> r[i]; dfs(l[i], -1, i); } for (int i = 1; i <= n; i++) sort(dd[i].begin(), dd[i].end()); bool flag3 = 0; for (int i = 1; i <= m; i++) { set <int> y; for (auto j : dd[l[i]]) y.insert(j); bool u2 = 0; for (auto j : dd[r[i]]) u2 |= y.count(j) && j != i; flag3 |= u2; u2 = 0; for (auto j : dd[l[i]]) if (j != i) u2 |= binary_search(dd[l[j]].begin(), dd[l[j]].end(), i); for (auto j : dd[r[i]]) if (j != i) u2 |= binary_search(dd[r[j]].begin(), dd[r[j]].end(), i); flag3 |= u2; } /*for (int i = 1; i <= n; i++) { for (auto j : dd[i]) cout << j << " "; cout << '\n'; }*/ if (flag3) { cout << "No\n"; continue; } for (int i = 1; i <= m; i++) { for (auto j : dd[r[i]]) { if (j != i) adj2[i].push_back(j); } }/* cout << '\n' << '\n'; for (int i = 1; i <= m; i++) { for (auto j : adj2[i]) cout << j << " "; cout << '\n'; }*/ for (int i = 1; i <= m; i++) { for (auto j : adj2[i]) { deg[j]++; } } vector <int> d; queue <int> cur; for (int i = 1; i <= m; i++) { if (deg[i] == 0) { cur.push(i); } } while (!cur.empty()) { auto j = cur.front(); cur.pop(); d.push_back(j); for (auto z : adj2[j]) { deg[z]--; if (deg[z] == 0) cur.push(z); } } if ((int)d.size() != m) { cout << "No\n"; } else { cout << "Yes\n"; } } }
#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...