Submission #1284299

#TimeUsernameProblemLanguageResultExecution timeMemory
1284299muhammad-ahmadThe Ties That Guide Us (CEOI23_incursion)C++20
12 / 100
163 ms5452 KiB
#include <bits/stdc++.h>
#include "incursion.h"
using namespace std;

const int NN = 5e4;
vector<int> adj[NN];
int dist[NN];

void dfs(int u, int p){
	dist[u] = dist[p] + 1;
	for (auto i : adj[u]){
		if (i != p) dfs(i, u);
	}
}

vector<int> mark(vector<pair<int, int>> F, int safe){
	int n = F.size() + 1;
	for (auto [u, v] : F){
		adj[u].push_back(v);
		adj[v].push_back(u);
	}
	dist[0] = -1;
	dfs(safe, 0);
	
	if (n == 2){
		if (safe == 1) return {1, 0};
		else return {0, 1};
	}
	else {
		vector<int> ans;
		for (int i = 1; i <= n; i++){
			if (i == safe) ans.push_back(1);
			else ans.push_back(dist[i] % 3);
		}
		return ans;
	}
	
}

void locate(vector<pair<int, int>> F, int curr, int t) {
	int n = F.size() + 1;
	for (auto [u, v] : F){
		adj[u].push_back(v);
		adj[v].push_back(u);
	}
	
	if (n == 2){
		if (t == 0) return;
		else {
			int x = visit(3 - curr);
			return;
		}
	}
	
	if (adj[curr].size() == 1){
		vector<int> c = {curr, adj[curr][0]};
		int x = visit(adj[curr][0]);
		int y;
		for (auto i : adj[adj[curr][0]]){
			if (i != curr){
				y = visit(i);
				c.push_back(i);
				break;
			}
		}
		visit(c[1]);
		visit(c[0]);
		if (t == 1 && x == 1 && y == 1) return;
	}
	
	if (adj[curr].size() == 2){
		int x = visit(adj[curr][0]);
		visit(curr);
		int y = visit(adj[curr][1]);
		visit(curr);
		if (t == 1 && x == 1 && y == 1) return;
	}
	
	int lst = 0;
	
	while (1){
		for (auto v : adj[curr]){
			if (lst == v) continue;
			int x = visit(v);
			
			if (t == 1 && x == 1) return;
			
			if ((t + 2) % 3 == x){
				lst = curr;
				curr = v;
				t = x;
				break;
			}
			else {
				lst = v;
				visit(curr);
			}
			
		}
	}
	
	return;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...