#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 time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |