Submission #994194

#TimeUsernameProblemLanguageResultExecution timeMemory
994194UVinceJail (JOI22_jail)C++17
49 / 100
5039 ms257312 KiB
#include <bits/stdc++.h> using namespace std; using ll=long long; void solve(); int main(){ ios_base::sync_with_stdio(0);cin.tie(0); int t=1; cin>>t; while (t--) solve(); return 0; } const int maxn = 120'000; vector<vector<int>> g(maxn); vector<int> num(maxn); int n,m; vector<int> s(maxn),t(maxn); vector<vector<int>> path(maxn); vector<bool> has(maxn,false); bool dfs (int v, int start, int par=-1){ bool ret=false; if (v==t[start]) return true; for (int to : g[v]){ if (to==par) continue; ret = ret || dfs(to, start, v); if (ret){ num[to]++; path[start].push_back(to); break; } } return ret; } void solve(){ cin>>n; path.assign(maxn, {}); num.assign(maxn,0); has.assign(maxn,false); g.assign(maxn,{}); queue<int> q; for (int i = 1; i < n; i++) { int a,b; cin>>a>>b; g[a].push_back(b); g[b].push_back(a); } cin>>m; for (int i = 1; i <= m; i++) { cin>>s[i]>>t[i]; dfs(s[i], i); num[s[i]]++; q.push(i); has[s[i]]=true; } bool change=true; while (change){ change=false; int sz=q.size(); for (int i=0;i<sz;i++){ int cur=q.front(); q.pop(); bool rem=num[t[cur]]-1; for (int j : path[cur]){ if (has[j]) rem=true; } if (rem) { q.push(cur); continue; } change=true; has[s[cur]]=false; num[s[cur]]--; for (int j : path[cur]){ num[j]--; } } } if (q.empty()){ cout<<"Yes\n"; } else { cout<<"No\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...