Submission #609671

#TimeUsernameProblemLanguageResultExecution timeMemory
609671MherJail (JOI22_jail)C++14
72 / 100
5094 ms851420 KiB
#include <bits/stdc++.h> using namespace std; const int inf = 1e9 + 7; int n, m; vector<vector<int>> g, p; vector<int> tin, tout; vector<int> s, f; vector<int> col; vector<int> parent; vector<int> st, ft; int cnt = 0; void dfs(int v, int pr) { tin[v] = cnt++; parent[v] = pr; for (int to : g[v]) { if (to == pr) continue; dfs(to, v); } tout[v] = cnt; } bool child(int a, int b) { return tin[a] <= tin[b] && tout[a] >= tout[b]; } void build(int v) { //cout << v << endl; int pnt = s[v]; while (!child(pnt, f[v])) { //cout << '-' << pnt << endl; if (st[pnt] >= 0) { p[v].push_back(st[pnt]); } if (ft[pnt] >= 0) { p[ft[pnt]].push_back(v); } pnt = parent[pnt]; } pnt = f[v]; while (!child(pnt, s[v])) { //cout << '-' << pnt << endl; if (st[pnt] >= 0) { p[v].push_back(st[pnt]); } if (ft[pnt] >= 0) { p[ft[pnt]].push_back(v); } pnt = parent[pnt]; } if (st[pnt] >= 0) { p[v].push_back(st[pnt]); } if (ft[pnt] >= 0) { p[ft[pnt]].push_back(v); } } bool cicle(int v) { col[v] = 1; bool ans = true; for (int to : p[v]) { if (to == v) continue; if (col[to] == 1) return false; if (col[to] == 0) ans &= cicle(to); } col[v] = 2; return ans; } void solve() { cin >> n; g.resize(n + 1); 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; p.resize(m); s.resize(m); f.resize(m); st.resize(n + 1, -1); ft.resize(n + 1, -1); for (int i = 0; i < m; i++) { cin >> s[i] >> f[i]; st[s[i]] = i; ft[f[i]] = i; } tin.resize(n + 1); tout.resize(n + 1); parent.resize(n + 1); dfs(1, 0); col.resize(m, 0); for (int i = 0; i < m; i++) { build(i); } bool ans = true; for (int i = 0; i < m; i++) { if (col[i] == 0) ans &= cicle(i); } cout << (ans ? "Yes" : "No") << endl; g.clear(); p.clear(); tin.clear(); tout.clear(); s.clear(); f.clear(); col.clear(); parent.clear(); st.clear(); ft.clear(); } int main() { 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...