Submission #877985

#TimeUsernameProblemLanguageResultExecution timeMemory
877985RegulusJail (JOI22_jail)C++17
0 / 100
10 ms17500 KiB
#include <bits/stdc++.h> // pA #define IO ios::sync_with_stdio(false);cin.tie(0); #define debug(x) cerr << #x << " = " << (x) << ' ' #define endl cerr << '\n' #define all(v) (v).begin(), (v).end() #define SZ(v) (ll)(v).size() #define lowbit(x) (x)&-(x) #define pb emplace_back #define F first #define S second using namespace std; using ll = long long; using pll = pair<ll, ll>; const int N = 2e5+5; //const int INF = 2e9; int s[N], t[N], state[N], tin[N], sz[N], timer, tout[N]; vector<int> g[N]; inline void dfs(int x, int pre) { tin[x] = ++timer, sz[x] = 1; for (int v : g[x]) { if (v == pre) continue; state[v] |= state[x]; dfs(v, x); sz[x] += sz[v]; } tout[x] = ++timer; } inline bool is_anc(int x, int y) { return tin[x] <= tin[y] && tout[y] <= tout[x]; } int main(void) { IO ll T, n, i, m, x, y; cin >> T; do { cin >> n; for (i=1; i <= n; ++i) tin[i] = tout[i] = sz[i] = state[i] = 0, g[i].clear(); for (i=0; i < n-1; ++i) cin >> x >> y, g[x].pb(y), g[y].pb(x); cin >> m; if (m > 2) assert(0); for (i=1; i <= m; ++i) cin >> s[i] >> t[i]; state[s[2]] |= 1, state[t[2]] |= 2; timer = 0; dfs(s[1], 0); if ((state[t[1]]&3) == 3) { cout << "No\n"; } else if (state[t[1]]&2) { if (is_anc(t[1], s[2])) cout << "No\n"; else cout << "Yes\n"; } else if (state[t[1]]&1) { if (!is_anc(t[1], t[2])) cout << "No\n"; else cout << "Yes\n"; } else { // debug.. if (is_anc(t[1], t[2]) || is_anc(t[1], s[2])) cout << "No\n"; else cout << "Yes\n"; } } while (--T); 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...