Submission #1246571

#TimeUsernameProblemLanguageResultExecution timeMemory
1246571damoonJail (JOI22_jail)C++20
49 / 100
5094 ms23044 KiB
#include <bits/stdc++.h> using namespace std; //#pragma GCC optimize("O3,unroll-loops") //main //#pragma GCC target("avx2") //cf... //#pragma GCC target("sse4") //Quera #define ll long long typedef pair<int,int> pii; typedef pair<int,pii> pip; typedef pair<pii,int> ppi; typedef pair<pii,pii> ppp; #define f first #define s second #define lc 2*id #define rc 2*id+1 #define mid (l+r)/2 #define all(x) x.begin(),x.end() #define pb push_back #define pp pop_back #define unicorn(x) x.resize(unique(x.begin(),x.end())-x.begin()) #define dig(x,d) ((x&(1ll<<d)) > 0) string pr(int* vv,int l,int r){for(int i=l;i<r;i++)cout<<vv[i]<<" ";return "";} string pr( ll* vv,int l,int r){for(int i=l;i<r;i++)cout<<vv[i]<<" ";return "";} string pr(vector<int> vv){for(auto i:vv)cout<<i<<" ";return "";} string pr( vector<ll> vv){for(auto i:vv)cout<<i<<" ";return "";} string pr(pii* vv,int l,int r){for(int i=l;i<r;i++)cout<<"( "<<vv[i].f<<","<<vv[i].s<<" ) ";return "";} string pr(vector<pii> vv){for(auto i:vv)cout<<"( "<<i.f<<","<<i.s<<" ) ";return "";} string pr(bool* vv,int l,int r){for(int i=l;i<r;i++)cout<<vv[i];return"";} ostream& operator <<(ostream& out, pii x){out << "("<<x.f<<", "<<x.s<<") ";return out;} random_device device; default_random_engine rng(device()); #define randt(a,b) uniform_int_distribution<int64_t>(a,b)(rng) const int L=2e5+10, mod=1e9+7; const int inf=1e9+10; int n,m; int st[L],fn[L],par[L],tim; int S[L],F[L],ind[L]; bool mark[L]; vector<int> adj[L],adj2[L],tp; vector<pii> edge; void dfsT(int v){ st[v] = ++tim; for(auto u:adj[v]){ if(u != par[v]){ par[u] = v; dfsT(u); } } fn[v] = ++tim; } bool ispar(int u,int v){ return (st[u] <= st[v] and fn[u] >= fn[v]); } int lca(int u,int v){ while(!ispar(u,v)){ u = par[u]; } return u; } bool isin(int u,int v,int w){ return ((ispar(w,u) xor ispar(w,v)) or w == lca(u,v)); } void reset(){ tp.clear(); edge.clear(); for(int i=1;i<=n;i++){ adj[i].clear(); adj2[i].clear(); mark[i] = 0; } } void dfs(int v){ mark[v] = 1; for(auto u:adj2[v]){ if(!mark[u]) dfs(u); } tp.pb(v); } int main(){ //ofstream cout ("out.out"); //ifstream cin ("in.in"); ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0); int t; cin>>t; for(int gg=0;gg<t;gg++){ cin>>n; reset(); for(int i=1;i<n;i++){ int u,v; cin>>u>>v; adj[u].pb(v); adj[v].pb(u); } cin>>m; for(int i=1;i<=m;i++){ cin>>S[i]>>F[i]; } dfsT(1); for(int i=1;i<=m;i++){ for(int j=1;j<=m;j++){ if(i == j) continue; if(isin(S[i],F[i],F[j]) or isin(S[j],F[j],S[i])){ //cout<<"ee: "<<i<<" "<<j<<endl; adj2[i].pb(j); } } } for(int i=1;i<=m;i++){ for(auto u:adj2[i]){ edge.pb(pii(i,u)); } //cout<<i<<" --> "<<pr(adj2[i])<<endl; } for(int i=1;i<=m;i++){ if(!mark[i]) dfs(i); } reverse(all(tp)); for(int i=0;i<m;i++){ ind[tp[i]] = i; } bool ok = 1; for(auto e:edge){ ok = ok and (ind[e.f] < ind[e.s]); } if(ok) cout<<"Yes"<<endl; else cout<<"No"<<endl; } }
#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...