Submission #1017747

# Submission time Handle Problem Language Result Execution time Memory
1017747 2024-07-09T09:56:09 Z Unforgettablepl Jail (JOI22_jail) C++17
0 / 100
10 ms 832 KB
#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]+1])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

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 time Memory Grader output
1 Correct 1 ms 348 KB Output is correct
2 Correct 0 ms 348 KB Output is correct
3 Correct 0 ms 348 KB Output is correct
4 Incorrect 10 ms 832 KB Output isn't correct
5 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 0 ms 348 KB Output is correct
2 Correct 0 ms 348 KB Output is correct
3 Incorrect 1 ms 348 KB Output isn't correct
4 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 0 ms 348 KB Output is correct
2 Correct 0 ms 348 KB Output is correct
3 Incorrect 1 ms 348 KB Output isn't correct
4 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 0 ms 348 KB Output is correct
2 Correct 0 ms 348 KB Output is correct
3 Incorrect 1 ms 348 KB Output isn't correct
4 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 0 ms 348 KB Output is correct
2 Correct 0 ms 348 KB Output is correct
3 Incorrect 1 ms 348 KB Output isn't correct
4 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 1 ms 344 KB Output is correct
2 Incorrect 0 ms 348 KB Output isn't correct
3 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 1 ms 348 KB Output is correct
2 Correct 0 ms 348 KB Output is correct
3 Correct 0 ms 348 KB Output is correct
4 Incorrect 10 ms 832 KB Output isn't correct
5 Halted 0 ms 0 KB -