Beingamanforever

Problem 3

Oct 7th, 2024
361
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.05 KB | None | 0 0
  1. // author : compounding
  2. #include <bits/stdc++.h>
  3. using namespace std;
  4.  
  5. const int MAXN = 200005;
  6. int start[MAXN], end[MAXN], subtree_size[MAXN], diff[MAXN], timer = 0;
  7. vector<int> adj[MAXN];
  8.  
  9. void dfs(int node, int parent) {
  10.     start[node] = timer++;
  11.     subtree_size[node] = 1;
  12.     for (int neighbor : adj[node]) {
  13.         if (neighbor != parent) {
  14.             dfs(neighbor, node);
  15.             subtree_size[node] += subtree_size[neighbor];
  16.         }
  17.     }
  18.     end[node] = timer;
  19. }
  20.  
  21. int main() {
  22.     int N, K;
  23.     cin >> N >> K;
  24.  
  25.     for (int i = 1; i < N; i++) {
  26.         int u, v;
  27.         cin >> u >> v;
  28.         adj[u].push_back(v);
  29.         adj[v].push_back(u);
  30.     }
  31.  
  32.     dfs(1, -1);
  33.  
  34.     for (int i = 1; i <= N; i++) {
  35.         if (subtree_size[i] <= K) {
  36.             diff[start[i]]++;
  37.             if (end[i] < N) diff[end[i]]--;
  38.         }
  39.     }
  40.  
  41.     int result = 0;
  42.     for (int i = 1; i < N; i++) {
  43.         diff[i] += diff[i - 1];
  44.         if (diff[i] > 0) result++;
  45.     }
  46.  
  47.     cout << result << endl;
  48.  
  49.     return 0;
  50. }
  51.  
Advertisement
Add Comment
Please, Sign In to add comment