Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // author : compounding
- #include <bits/stdc++.h>
- using namespace std;
- const int MAXN = 200005;
- int start[MAXN], end[MAXN], subtree_size[MAXN], diff[MAXN], timer = 0;
- vector<int> adj[MAXN];
- void dfs(int node, int parent) {
- start[node] = timer++;
- subtree_size[node] = 1;
- for (int neighbor : adj[node]) {
- if (neighbor != parent) {
- dfs(neighbor, node);
- subtree_size[node] += subtree_size[neighbor];
- }
- }
- end[node] = timer;
- }
- int main() {
- int N, K;
- cin >> N >> K;
- for (int i = 1; i < N; i++) {
- int u, v;
- cin >> u >> v;
- adj[u].push_back(v);
- adj[v].push_back(u);
- }
- dfs(1, -1);
- for (int i = 1; i <= N; i++) {
- if (subtree_size[i] <= K) {
- diff[start[i]]++;
- if (end[i] < N) diff[end[i]]--;
- }
- }
- int result = 0;
- for (int i = 1; i < N; i++) {
- diff[i] += diff[i - 1];
- if (diff[i] > 0) result++;
- }
- cout << result << endl;
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment