Submission #1242228

#TimeUsernameProblemLanguageResultExecution timeMemory
1242228hamanp87Jail (JOI22_jail)C++20
0 / 100
15 ms3144 KiB
#include<bits/stdc++.h> using namespace std; typedef vector<int> veci; const int N=12e4+5; int n,m,q,pars[N][18],dep[N],up[N],dn[N]; veci adj[N]; bool bad; void dfs0(int u,int p) { pars[u][0]=p; dep[u]=(p<0?0:dep[p]+1); for(int v:adj[u]) { if(v==p) continue; dfs0(v,u); } } int LCA(int a,int b) { if(dep[a]<dep[b]) swap(a,b); int dif=dep[a]-dep[b]; for(int k=0;k<18;k++) if(dif&(1<<k)) a=pars[a][k]; if(a==b) return a; for(int k=17;k>=0;k--) { if(pars[a][k]!=pars[b][k]) { a=pars[a][k]; b=pars[b][k]; } } return pars[a][0]; } void dfs1(int u,int p) { for(int v:adj[u]) { if(v==p) continue; dfs1(v,u); up[u]+=up[v]; dn[u]+=dn[v]; if(up[v]>0 and dn[v]>0) bad=1; } } int main() { cin>>q; while(q--) { cin>>n; for(int i=1;i<=n;i++) { adj[i].clear(); up[i]=dn[i]=0; } for(int i=1;i<n;i++) { int a,b; cin>>a>>b; adj[a].push_back(b); adj[b].push_back(a); } dfs0(1,-1); for(int k=1;k<18;k++) { for(int v=1;v<=n;v++) { int p=pars[v][k-1]; pars[v][k]=(p<0?-1:pars[p][k-1]); } } cin>>m; vector<pair<int,int>> prs(m); for(int i=0;i<m;i++) { int s,t; cin>>s>>t; prs[i]={s,t}; int l=LCA(s,t); up[s]++; up[l]--; dn[t]++; dn[l]--; } bad=0; dfs1(1,-1); cout<<(bad?"No\n":"Yes\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...