Submission #1257294

#TimeUsernameProblemLanguageResultExecution timeMemory
1257294MisterReaper수도 (JOI20_capital_city)C++20
11 / 100
3101 ms203740 KiB
// File AA.cpp created on 13.08.2025 at 00:09:57 #include <bits/stdc++.h> using i64 = long long; #ifdef DEBUG #include "/home/ahmetalp/Desktop/Workplace/debug.h" #else #define debug(...) void(23) #endif int main() { std::ios::sync_with_stdio(false); std::cin.tie(nullptr); int N, K; std::cin >> N >> K; std::vector<std::vector<int>> adj(N); for (int i = 1; i < N; ++i) { int A, B; std::cin >> A >> B; --A, --B; adj[A].emplace_back(B); adj[B].emplace_back(A); } std::vector<int> C(N); for (int i = 0; i < N; ++i) { std::cin >> C[i]; --C[i]; } std::vector<std::vector<int>> bdj(K); for (int c = 0; c < K; ++c) { int p = 0; while (C[p] != c) { p++; } auto dfs = [&](auto&& self, int v, int pr) -> bool { bool good = false; for (auto u : adj[v]) { if (u == pr) { continue; } good |= self(self, u, v); } if (C[v] == c) { good = true; } if (good && C[v] != c) { bdj[c].emplace_back(C[v]); } return good; }; dfs(dfs, p, -1); } debug(bdj); int n = 0, tim = 0; std::vector<int> tin(K, -1), low(K, -1), bel(K, -1), siz, stk; auto dfs = [&](auto&& self, int v) -> void { tin[v] = low[v] = tim++; stk.emplace_back(v); for (auto u : bdj[v]) { if (tin[u] == -1) { self(self, u); low[v] = std::min(low[v], low[u]); } else if (bel[u] == -1) { low[v] = std::min(low[v], tin[u]); } } if (tin[v] == low[v]) { int u; siz.emplace_back(0); do { u = stk.back(); stk.pop_back(); bel[u] = n; siz[n]++; } while (u != v); n++; } }; for (int i = 0; i < K; ++i) { if (tin[i] == -1) { dfs(dfs, i); } } debug(bel, siz); std::vector<int> bad(n); for (int v = 0; v < K; ++v) { for (auto u : bdj[v]) { if (bel[u] != bel[v]) { bad[bel[v]] = true; break; } } } int ans = K + 1; for (int i = 0; i < n; ++i) { if (!bad[i]) { ans = std::min(ans, siz[i]); } } std::cout << ans - 1 << '\n'; return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...