Advertisement
Guest User

Untitled

a guest
Nov 17th, 2019
121
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.97 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. using uint = unsigned int;
  4. using ll = long long;
  5. using ld = long double;
  6. using ull = unsigned long long;
  7. using pii = pair<int, int>;
  8. using pll = pair<ll, ll>;
  9. #define dbg(x) cerr<<#x": "<<(x)<<endl
  10. #define dbg_p(x) cerr<<#x": "<<(x).first<<' '<<(x).second<<endl
  11. #define dbg_v(x, n) {cerr<<#x"[]: ";for(long long _=0;_<n;++_)cerr<<(x)[_]<<' ';cerr<<endl;}
  12. #define all(v) v.begin(), v.end()
  13. #define fi first
  14. #define se second
  15.  
  16. template<typename T1, typename T2>
  17. ostream& operator <<(ostream &out, const pair<T1, T2> &item) {
  18. out << '(' << item.first << ", " << item.second << ')';
  19. return out;
  20. }
  21.  
  22. template <typename T>
  23. ostream& operator <<(ostream &out, const vector<T>& v) {
  24. for(const auto &item : v) out << item << ' ';
  25. return out;
  26. }
  27.  
  28. #define Nmax 500005
  29. int n,a[Nmax];
  30. vector<int> v[Nmax],v2[Nmax];
  31. pii b[Nmax];
  32. int uz[Nmax];
  33.  
  34. void dfs(int nod, int ant, int h){
  35. a[nod] += h;
  36. for (auto it : v[nod]){
  37. if (it == ant) continue;
  38. v2[nod].push_back(it);
  39. dfs(it, nod, h+1);
  40. }
  41. }
  42.  
  43. int dfs2(int nod){
  44. uz[nod] = 1;
  45. int x = 0;
  46. for (auto it : v2[nod]){
  47. x += dfs2(it);
  48. }
  49. return x;
  50. }
  51.  
  52. bool OK(long long x){
  53. for (int i=1;i<=n;i++){
  54. // dbg(a[i]);
  55. if (a[i] > x) return 0;
  56. b[i].first = x - a[i];
  57. b[i].second = i;
  58. uz[i] = 0;
  59. }
  60. sort(b+1,b+n+1);
  61. // dbg_v(b+1,n);
  62. int p = 0;
  63. for (int i=1;i<=n;i++){
  64. if (!uz[b[i].second]){
  65. // dbg(p);
  66. // dbg(b[i]);
  67. p += dfs2(b[i].second);
  68. if (p > b[i].first) return 0;
  69. p++;
  70. }
  71. }
  72. return 1;
  73. }
  74.  
  75. int main()
  76. {
  77. ios_base::sync_with_stdio(false);
  78. cin >> n;
  79. for (int i=1;i<=n;i++){
  80. cin >> a[i];
  81. }
  82. for (int i=1;i<n;i++){
  83. int x,y;
  84. cin >> x >> y;
  85. v[x].push_back(y);
  86. v[y].push_back(x);
  87. }
  88. dfs(1,-1,0);
  89.  
  90. // OK(2);
  91. // return 0;
  92. long long p = 1, st = 0;
  93. for (;p<2e9;p<<=1);
  94. for (;p>=1;p>>=1){
  95. if (st + p <= 2e9 && !OK(st+p)) st+=p;
  96. }
  97. if (!OK(st)) st++;
  98.  
  99. cout << st << '\n';
  100.  
  101. return 0;
  102. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement