Submission #1017750

#TimeUsernameProblemLanguageResultExecution timeMemory
1017750UnforgettableplJail (JOI22_jail)C++17
0 / 100
12 ms604 KiB
#include <bits/stdc++.h> using namespace std; #define int long long const int modulo = 1e9+7; void solve(){ int n; cin >> n; vector<vector<int>> adj(n+1); for(int i=1;i<n;i++){ int a,b;cin>>a>>b; adj[a].emplace_back(b); adj[b].emplace_back(a); } vector<int> depth(n+1); vector<vector<int>> p(n+1,vector<int>(17)); function<void(int,int,int)> dfs = [&](int x,int par,int dep){ depth[x]=dep; p[x][0]=par; for(int&i:adj[x])if(i!=par)dfs(i,x,dep+1); }; dfs(1,0,1); for(int bit=1;bit<17;bit++){ for(int i=1;i<=n;i++){ p[i][bit] = p[p[i][bit-1]][bit-1]; } } auto lift = [&](int x,int tar){ for(int bit=0;bit<17;bit++)if(tar&(1<<bit))x=p[x][bit]; return x; }; int m; cin >> m; vector<vector<int>> secadj(m+1); vector<int> s(m+1); vector<int> t(m+1); auto collides = [&](int curr,int v){ int a = s[curr]; int b = t[curr]; if(a==v or b==v)return true; bool worksa = false; if(depth[a]>=depth[v] and lift(a,depth[a]-depth[v])==v)worksa=true; bool worksb = false; if(depth[b]>=depth[v] and lift(b,depth[b]-depth[v])==v)worksb=true; if(worksa and worksb){ return lift(a,depth[a]-depth[v]-1)!=lift(b,depth[b]-depth[v]-1); } else return worksa or worksb; }; vector<pair<int,int>> ranges; vector<int> prefl(n+2); vector<int> prefr(n+2); for(int i=1;i<=m;i++)cin>>s[i]>>t[i]; for(int i=1;i<=m;i++){ if(s[i]<t[i]){ prefr[s[i]]++; prefr[t[i]+1]--; } else { prefl[t[i]]++; prefl[s[i]+1]--; } } for(int i=1;i<=n;i++)prefr[i]+=prefr[i-1]; for(int i=1;i<=n;i++)prefl[i]+=prefl[i-1]; for(int i=1;i<=m;i++)ranges.emplace_back(min(s[i],t[i]),max(s[i],t[i])); int r = 0; bool works = true; for(auto[a,b]:ranges){ if(b<=r)works=false; r = b; } for(int i=1;i<=m;i++){ if(s[i]<t[i]){ if(prefl[s[i]] or prefl[t[i]])works=false; } else { if(prefr[t[i]] or prefr[s[i]])works=false; } } if(!works)cout<<"No\n"; else cout << "Yes\n"; } int32_t main(){ ios_base::sync_with_stdio(false); cin.tie(nullptr); int t; cin >> t; while(t--)solve(); }

Compilation message (stderr)

jail.cpp: In function 'void solve()':
jail.cpp:39:7: warning: variable 'collides' set but not used [-Wunused-but-set-variable]
   39 |  auto collides = [&](int curr,int v){
      |       ^~~~~~~~
#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...