Submission #554572

#TimeUsernameProblemLanguageResultExecution timeMemory
554572promaJail (JOI22_jail)C++17
0 / 100
1152 ms1048584 KiB
#include <bits/stdc++.h> using namespace std; const int N = 120005; int n, m, p[N], s[N], t[N], used[N]; vector <int> g[N], path[N], prisoner[N]; void dfs(int v) { for (auto i: g[v]) { if (i != p[v]) { p[i] = v; dfs(i); } } } bool find_cycle(int v) { used[v] = 1; for (auto i: prisoner[v]) { if (used[i] == 1) return true; if (!used[i] and find_cycle(i)) return true; } used[v] = 2; return false; } void solve() { cin >> n; for (int i = 1; i <= n; i ++) { g[i].clear(); path[i].clear(); prisoner[i].clear(); } for (int i = 1; i < n; i ++) { int a, b; cin >> a >> b; g[a].push_back(b); g[b].push_back(a); } cin >> m; for (int i = 0; i < m; i ++) { cin >> s[i] >> t[i]; p[s[i]] = 0; dfs(s[i]); for (int j = t[i]; j; j = p[j]) { path[i].push_back(j); } for (int j = 0; j < i; j ++) { int f1 = 1, f2 = 1; for (auto k: path[i]) { if (k == s[j]) f1 = 0; if (k == t[j]) f2 = 0; } for (auto k: path[j]) { if (k == t[i]) f1 = 0; if (k == s[i]) f2 = 0; } if (!f1 and !f2) { cout << "No\n"; return; } if (f1 and !f2) { prisoner[i].push_back(j); } if (!f1 and f2) { prisoner[j].push_back(i); } } } memset(used, 0, sizeof(used)); /* for (int i = 0; i < m; i ++) { cout << i << ":"; for (auto j: prisoner[i]) { cout << " " << j; } cout << endl; }*/ for (int i = 0; i < m; i ++) { if (!used[i] and find_cycle(i)) { cout << "No\n"; return; } } cout << "Yes\n"; } int main() { ios_base::sync_with_stdio(0); cin.tie(0); int q; cin >> q; while (q --) { solve(); } 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...