fork download
  1. #pragma warning (disable : 4996)
  2. #include<iostream>
  3. #include<string>
  4. #include<stack>
  5. #include<vector>
  6. #include<cmath>
  7. #include<algorithm>
  8. #include<queue>
  9. #include<sstream>
  10. #include<ctype.h>
  11. #include<memory.h>
  12. #include<stdlib.h>
  13. #include<fstream>
  14. #include<set>
  15. #include<stdio.h>
  16. #include<bitset>
  17. #include<map>
  18. using namespace std;
  19.  
  20.  
  21. int vis[111111];
  22. int d[111111];
  23. int power[111111];
  24. vector<int> v[111111];
  25. int cnt;
  26. int n, m;
  27.  
  28. void bfs(int x){
  29. queue<int> q;
  30. q.push(x);
  31. vis[x] = 1;
  32. if (power[x] == 1)
  33. d[x] = 1;
  34. while (!q.empty()){
  35. int n = q.front();
  36. q.pop();
  37. for (int i = 0; i < (int)v[n].size(); i++){
  38. int x = v[n][i];
  39. if (!vis[x]){
  40. if (power[x] && power[n])
  41. d[x] = d[n] + 1;
  42. vis[x] = 1;
  43. if (d[x] <= m){
  44. q.push(x);
  45. if (v[x].size() == 1)
  46. cnt++;
  47. }
  48. }
  49. }
  50. }
  51. }
  52.  
  53. int main(){
  54. // freopen("input.in", "r", stdin);
  55. scanf("%d%d", &n, &m);
  56.  
  57. for (int i = 0; i < n; i++)
  58. scanf("%d", &power[i]);
  59. for (int i = 0; i <n-1; i++){
  60. int a, b;
  61. scanf("%d%d", &a, &b);
  62. --a, --b;
  63. v[a].push_back(b);
  64. v[b].push_back(a);
  65. }
  66. bfs(0);
  67. printf("%d", cnt);
  68.  
  69. return 0;
  70. }
  71.  
Success #stdin #stdout 0s 5428KB
stdin
4 1
1 1 0 0
1 2
1 3
1 4
stdout
2