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...