Submission #1306897

#TimeUsernameProblemLanguageResultExecution timeMemory
1306897Double_SlashMergers (JOI19_mergers)C++20
100 / 100
412 ms49660 KiB
#include <bits/stdc++.h> using namespace std; int n, k, s[500001], sum[500001], f[500001], sz[500001], ans = 1; basic_string<int> adj[500001]; int dfs(int i, int p = 0) { int deg = 0; for (int j: adj[i]) { if (j == p) continue; int d = dfs(j, i); deg += sz[j] ? d : 1; sz[i] += sz[j]; } ans += not sz[i] and deg == (i == 1); return deg; } int main() { cin >> n >> k; for (int i = n; --i;) { int a, b; cin >> a >> b; adj[a] += b; adj[b] += a; } for (int i = 1; i <= n; ++i) { cin >> s[i]; ++f[s[i]]; } for (int i = 1; i <= n; ++i) { if (--f[s[i]]) sum[s[i]] += sz[i] = rand(); else sz[i] = -sum[s[i]]; } dfs(1); cout << ans / 2; }
#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...