Submission #890798

#TimeUsernameProblemLanguageResultExecution timeMemory
890798vjudge1Jail (JOI22_jail)C++17
49 / 100
5064 ms483580 KiB
#include <bits/stdc++.h> using namespace std; #define all(x) x.begin(), x.end() #define ar array #define pb push_back #define ln '\n' #define int long long using i64 = long long; template <class F, class _S> bool chmin(F &u, const _S &v){ bool flag = false; if ( u > v ){ u = v; flag |= true; } return flag; } template <class F, class _S> bool chmax(F &u, const _S &v){ bool flag = false; if ( u < v ){ u = v; flag |= true; } return flag; } void solve(){ int n; cin >> n; vector <vector<int>> G(n); for ( int i = 0; i + 1 < n; i++ ){ int u, v; cin >> u >> v; --u, --v; G[u].pb(v), G[v].pb(u); } int m; cin >> m; vector <int> S(m), T(m); for ( int i = 0; i < m; i++ ){ cin >> S[i] >> T[i]; --S[i], --T[i]; } vector <int> tmp; auto dfs = [&](auto dfs, int u, int p, int des) -> bool{ if ( u == des ){ return true; } for ( auto &v: G[u] ){ if ( v != p ){ if ( dfs(dfs, v, u, des) ){ tmp.pb(u); return true; } } } return false; }; vector <vector<int>> lst(m); for ( int i = 0; i < m; i++ ){ tmp.clear(); dfs(dfs, S[i], -1, T[i]); reverse(all(tmp)); tmp.pb(T[i]); lst[i] = tmp; } auto bad = [&](int j, int i){ for ( auto &u: lst[i] ){ if ( u == S[j] ){ return true; } } for ( auto &u: lst[j] ){ if ( u == T[i] ){ return true; } } return false; }; vector <vector<int>> P(m); for ( int i = 0; i < m; i++ ){ for ( int j = i + 1; j < m; j++ ){ if ( bad(i, j) ){ P[i].pb(j); } if ( bad(j, i) ){ P[j].pb(i); } } } vector <int> us(m); auto dfs2 = [&](auto dfs2, int u) -> bool{ us[u] = 1; for ( auto &v: P[u] ){ if ( !us[v] ){ if ( !dfs2(dfs2, v) ){ return false; } } else if ( us[v] == 1 ){ return false; } } us[u] = 2; return true; }; bool flag = true; for ( int i = 0; i < m; i++ ){ if ( !us[i] ){ flag &= dfs2(dfs2, i); } } cout << (flag ? "Yes\n" : "No\n"); } signed main(){ ios_base::sync_with_stdio(false); cin.tie(nullptr); int t; cin >> t; while ( t-- ){ solve(); } cout << '\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...