Submission #1300267

#TimeUsernameProblemLanguageResultExecution timeMemory
1300267avighnaCapital City (JOI20_capital_city)C++20
11 / 100
3095 ms28424 KiB
#include <bits/stdc++.h> using namespace std; const int inf = 1e9; int main() { ios::sync_with_stdio(false); cin.tie(nullptr); int n, k; cin >> n >> k; vector<vector<int>> adj(n + 1); for (int i = 0, u, v; i < n - 1; ++i) { cin >> u >> v; adj[u].push_back(v); adj[v].push_back(u); } vector<int> par(n + 1); auto dfs = [&](auto &&self, int u, int p) -> void { for (int &i : adj[u]) { if (i != p) { par[i] = u; self(self, i, u); } } }; vector<int> c(n + 1); vector<vector<int>> towns(k + 1); for (int i = 1; i <= n; ++i) { cin >> c[i]; towns[c[i]].push_back(i); } int ans = inf; for (int i = 1; i <= n; ++i) { par[i] = i; dfs(dfs, i, 0); vector<bool> vis(n + 1); set<int> cur; queue<int> q; cur.insert(c[i]); for (int &i : towns[c[i]]) { q.push(i); } while (!q.empty()) { int u = q.front(); q.pop(); if (vis[u]) { continue; } vis[u] = true; if (!cur.contains(c[u])) { cur.insert(c[u]); for (int &i : towns[c[u]]) { q.push(i); } } if (!vis[par[u]]) { q.push(par[u]); } } ans = min(ans, int(cur.size()) - 1); } cout << ans << '\n'; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...