[关闭]
@VecMD 2016-07-11T13:13:45.000000Z 字数 801 阅读 2110

CF 682C

  1. #include <cstdio>
  2. #include <vector>
  3. #include <utility>
  4. #include <cstring>
  5. #include <iostream>
  6. #include <algorithm>
  7. const int maxn = 100007;
  8. int ver[maxn], size[maxn], n;
  9. std::vector<std::pair<int, long long> > lis[maxn];
  10. void getSize(int u, int f){
  11. size[u] = 1;
  12. for(auto i : lis[u]){
  13. int v = i.first;
  14. if(v == f) continue;
  15. getSize(v, u);
  16. size[u] += size[v];
  17. }
  18. }
  19. int ans = 0;
  20. void dfs(int u, int f, long long val){
  21. if(val > ver[u]) {
  22. ans += size[u];
  23. return;
  24. }
  25. for(auto i : lis[u]){
  26. int v = i.first;
  27. if(v == f) continue;
  28. dfs(v, u, std::max(val + i.second, i.second));
  29. }
  30. }
  31. int main()
  32. {
  33. int u, val;
  34. std::cin >> n;
  35. for(int i = 1; i <= n; i ++){
  36. std::cin >> ver[i];
  37. }
  38. for(int i = 2; i <= n; i ++){
  39. std::cin >> u >> val;
  40. lis[i].push_back(std::make_pair(u, val));
  41. lis[u].push_back(std::make_pair(i, val));
  42. }
  43. getSize(1, 1);
  44. dfs(1, 1, 0);
  45. std::cout << ans << std::endl;
  46. }
添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注