제출 #890950

#제출 시각아이디문제언어결과실행 시간메모리
890950vjudge1Jail (JOI22_jail)C++17
26 / 100
5084 ms8788 KiB
#include <bits/stdc++.h> using namespace std; #define int long long #define all(x) x.begin(), x.end() #define size(x) (int)x.size() template<class S, class T> bool chmin(S &a, const T &b) { return a > b && (a = b) == b; } template<class S, class T> bool chmax(S &a, const T &b) { return a < b && (a = b) == b; } const int inf = 1e9 + 7; const int INF = 1e18 + 7; const int mod = 998244353; void Main() { int n; cin >> n; vector<int> g[n]; bool bamboo = true; for (int i = 1; i < n; ++i) { int a, b; cin >> a >> b; a--, b--; if (b != a + 1) { bamboo = false; } g[a].push_back(b); g[b].push_back(a); } if (bamboo) { vector<bool> used(n, false); bool flag = true; deque<pair<int, int>> l, r; int m; cin >> m; while (m--) { int s, t; cin >> s >> t; s--, t--; if (t > s) { r.push_back({t, s}); } else { l.push_back({t, s}); } used[s] = true; } sort(all(l)), sort(all(r)); while (!l.empty()) { int s = l.front().second, t = l.front().first; l.pop_front(); used[s] = false; while (s >= t) { if (used[s]) { flag = false; break; } s--; } used[t] = true; } while (!r.empty()) { int s = r.back().second, t = r.back().first; r.pop_back(); used[s] = false; while (s <= t) { if (used[s]) { flag = false; break; } s++; } used[t] = true; } cout << (flag ? "Yes" : "No") << '\n'; } else { int m; cin >> m; vector<vector<int>> path; vector<int> p(n, -1); vector<bool> vis(n); function<void(int, int)> dfs = [&](int v, int parent) { for (int to : g[v]) { if (to != parent) { p[to] = v; dfs(to, v); } } }; while (m--) { int s, t; cin >> s >> t; s--, t--; vis[s] = true; dfs(s, -1); vector<int> cur; int x = t; while (x != -1) { cur.push_back(x); x = p[x]; } reverse(all(cur)); path.push_back(cur); fill(all(p), -1); } sort(all(path)); bool flag = false; do { bool cur = true; auto used = vis; for (auto way : path) { used[way[0]] = false; for (int v : way) { if (used[v]) { cur = false; break; } } used[way.back()] = true; } flag |= cur; } while (next_permutation(all(path))); cout << (flag ? "Yes" : "No") << '\n'; } } signed main() { cin.tie(nullptr)->sync_with_stdio(false); int q; cin >> q; while (q--) { Main(); } }
#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...