Submission #1177604

#TimeUsernameProblemLanguageResultExecution timeMemory
1177604chikien2009Mergers (JOI19_mergers)C++20
0 / 100
27 ms16060 KiB
#include <bits/stdc++.h> using namespace std; void setup() { ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); } int n, k, a, b, c[500000], l[500000], r[500000]; vector<int> g[500000]; inline void DFS1(int node, int par) { if (l[c[node]] == -1) { l[c[node]] = a; } a++; for (auto &i : g[node]) { if (i != par) { DFS1(i, node); } } r[c[node]] = a - 1; } inline pair<int, pair<int, int>> DFS2(int node, int par) { pair<int, pair<int ,int>> p; int num, high = r[c[node]], low = l[c[node]], sp = a; a++; for (auto & i : g[node]) { if (i != par) { p = DFS2(i, node); low = min(low, p.second.first); high = max(high, p.second.second); num += p.first; } } if (low == sp && high == a - 1) { if (node == 0) { b += (num == 1); } else { b += (num == 0); num = 1; } } return {num, {low, high}}; } int main() { setup(); cin >> n >> k; for (int i = 0; i < n - 1; ++i) { cin >> a >> b; g[a - 1].push_back(b - 1); g[b - 1].push_back(a - 1); } for (int i = 0; i < n; ++i) { cin >> c[i]; c[i]--; l[c[i]] = -1; } a = b = 0; DFS1(0, 0); a = 0; DFS2(0, 0); cout << (b + 1) / 2; 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...
#Verdict Execution timeMemoryGrader output
Fetching results...