Submission #1224581

#TimeUsernameProblemLanguageResultExecution timeMemory
1224581LaMatematica14The Ties That Guide Us (CEOI23_incursion)C++20
12 / 100
146 ms7248 KiB
#include <bits/stdc++.h> using namespace std; vector<vector<int>> adj; int visit(int 𝑣); void dfs(int a, int p, vector<int> &ret) { for (int x : adj[a]) { if (x == p) continue; ret[x] = (ret[a]+2)%3; dfs(x, a, ret); } } void dd(int a, int p, vector<int> &d) { d[a] = 0; for (int x : adj[a]) { if (x == p) continue; dd(x, a, d); d[a] = max(d[x]+1, d[a]); } } vector<int> mark(vector<pair<int, int>> F, int safe) { int N = F.size()+2; adj.resize(N); for (auto x : F) { adj[x.first].push_back(x.second); adj[x.second].push_back(x.first); } vector<int> ret(N); ret[safe] = 2; dfs(safe, -1, ret); ret.erase(ret.begin()); return ret; } void locate(vector<pair<int, int>> F, int curr, int t) { int N = F.size()+2; adj.clear(); adj.resize(N); for (auto x : F) { adj[x.first].push_back(x.second); adj[x.second].push_back(x.first); } vector<int> depth(N); vector<int> seen(N, -1); seen[curr] = t; auto visitme = [&](int a) -> int { if (seen[a] == -1) seen[a] = visit(a); return seen[a]; }; dd(curr, -1, depth); int prev = -1; while (1) { int best = adj[curr][0], other = -1; if (best == prev) { if (adj[curr].size() == 1) return; // ok? best = adj[curr][1]; } for (int x : adj[curr]) { if (x == prev || x == best) continue; if (depth[best] < depth[x]) { other = best; best = x; } else other = x; } prev = curr; int aus = visit(best); if (aus == (t+1)%3) curr = best, t = aus; else { visit(curr); if (other == -1) return; aus = visit(other); if (aus == (t+1)%3) curr = other, t = aus; else { visit(curr); return; } } } 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...