제출 #1244195

#제출 시각아이디문제언어결과실행 시간메모리
1244195fskaricaJail (JOI22_jail)C++20
0 / 100
3 ms4936 KiB
#include <bits/stdc++.h> using namespace std; #define ll long long #define fi first #define se second #define pii pair<int, int> const int MAX = 2e5 + 10; int n, m; int x, y; vector <int> veze[MAX]; vector <vector<int>> v; int rek(int pos, int last) { if (pos == y) { v.back().push_back(pos); return 1; } for (auto e : veze[pos]) { if (e == last) continue; if (rek(e, pos)) { v.back().push_back(pos); return 1; } } return 0; } void input() { cin >> n; for (int i = 0; i <= n; i++) { veze[i].clear(); } for (int i = 0; i < n - 1; i++) { cin >> x >> y; veze[x].push_back(y); veze[y].push_back(x); } v.clear(); cin >> m; for (int i = 0; i < m; i++) { cin >> x >> y; v.push_back({}); rek(x, -1); reverse(v.back().begin(), v.back().end()); } } int good(vector<int> a, vector<int> b, vector<int> c) { /// ---------- 1. ---------- int imaPoc = false, imaKraj = false; for (auto e : a) { if (e == b[0]) imaPoc = true; if (e == b.back()) imaKraj = true; } if (imaPoc && imaKraj) return false; /// ------------------------ /// ---------- 2. ---------- int prijedePoc = false; for (auto e : a) if (e == b[0]) prijedePoc = true; int prijedePoc2 = false; for (auto e : b) if (e == a[0]) prijedePoc2 = true; if (prijedePoc && prijedePoc2) return false; /// ------------------------ /// ---------- 3. ---------- int dosoA = -1, pocc; for (int i = 0; i < (int)a.size(); i++) { if (a[i] != c[0]) continue; pocc = i; for (int j = i; j >= 0; j--) { if (a[j] == c[dosoA + 1]) dosoA++; } break; } int dosoB = c.size(), pocc2; for (int i = 0; i < (int)b.size(); i++) { if (b[i] != c.back()) continue; pocc2 = i; for (int j = i; j >= 0; j--) { if (b[j] == c[dosoB - 1]) dosoB--; } break; } if (dosoA + 1 >= dosoB && dosoA == pocc && dosoB == pocc2) return false; /// ------------------------ /// ---------- 4. ---------- dosoA = -1, pocc = 0; for (int i = 0; i < (int)a.size(); i++) { if (a[i] != c[0]) continue; pocc = i; for (int j = i; j < a.size(); j++) { if (a[j] == c[dosoA + 1]) dosoA++; } break; } dosoB = c.size(), pocc2 = 0; for (int i = 0; i < (int)b.size(); i++) { if (b[i] != c.back()) continue; pocc2 = i; for (int j = i; j < b.size(); j++) { if (b[j] == c[dosoB - 1]) dosoB--; } break; } if (dosoA + 1 >= dosoB && dosoA == (a.size() - pocc) && dosoB == (b.size() - pocc2)) return false; /// ------------------------ return true; } void solve() { input(); // cout << "v:\n"; // for (auto e : v) { // for (auto e2 : e) cout << e2 << " "; cout << "\n"; // } // cout << "\n"; bool sol = true; for (int i = 0; i < m; i++) { for (int j = 0; j < m; j++) { if (i == j) continue; for (int k = 0; k < m; k++) { if (i == k) continue; if (j == k) continue; if (!good(v[i], v[j], v[k])) sol = false; } } } if (sol) cout << "Yes\n"; else cout << "No\n"; } int main() { // ios_base::sync_with_stdio(0); // cin.tie(0); int t; cin >> t; while (t--) { 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...