Submission #876915

#TimeUsernameProblemLanguageResultExecution timeMemory
876915IvkosqnJail (JOI22_jail)C++14
0 / 100
20 ms7156 KiB
#include <bits/stdc++.h> #define endl '\n' using namespace std; const int maxn = 120010; int n, m, s[maxn], f[maxn], used[maxn], bef[maxn]; vector<int> v[maxn], g[maxn], paths[510]; int usedp[maxn]; void find_path(int ver){ used[ver] = 1; for(int nb : v[ver]){ if(used[nb]) continue; bef[nb] = ver; find_path(nb); } } void read(){ cin >> n; for(int i = 1;i <= n;i++){ v[i].clear(); g[i].clear(); } for(int i = 1;i <= m;i++) paths[i].clear(); for(int i = 1;i <= n - 1;i++){ int x, y; cin >> x >> y; v[x].push_back(y); v[y].push_back(x); } cin >> m; for(int i = 1;i <= m;i++){ cin >> s[i] >> f[i]; for(int k = 1;k <= n;k++) used[k] = 0; find_path(s[i]); paths[i].push_back(f[i]); int x = f[i]; while(x != s[i]){ x = bef[x]; paths[i].push_back(x); } sort(paths[i].begin(), paths[i].end()); } } bool cycle = 0; void DFS(int ver){ used[ver] = 1; for(int nb : g[ver]){ if(!used[nb]) DFS(nb); else if(used[nb] == 1) cycle = 1; } used[ver] = 2; } void dfs(int ver){ used[ver] = 1; for(int nb : v[ver]){ if(used[nb]) continue; dfs(nb); } } void solve(){ read(); for(int i = 1;i <= m;i++){ for(int nb : paths[i]) usedp[nb] = 1; for(int j = 1;j <= m;j++){ if(i == j) continue; for(int k = 1;k <= n;k++) used[k] = 0; used[s[j]] = 1; dfs(s[i]); if(!used[f[i]]){ g[j].push_back(i); continue; } if(usedp[s[j]]){ g[j].push_back(i); continue; } int ans = -1, l = 0, r = paths[j].size() - 1; while(l <= r){ int mid = (l + r) / 2; if(paths[j][mid] < f[i]) l = mid + 1, ans = mid; else r = mid - 1; } if(ans != -1 && paths[j][ans] == f[i]){ g[j].push_back(i); } } for(int nb : paths[i]) usedp[nb] = 0; } cycle = 0; memset(used, 0, sizeof(used)); for(int i = 1;i <= n;i++){ if(!used[i]){ DFS(i); } } if(cycle) cout << "No\n"; else cout << "Yes\n"; } int main(){ ios_base::sync_with_stdio(false); 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...