Advertisement
Guest User

Untitled

a guest
Jan 27th, 2015
1,234
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.84 KB | None | 0 0
  1. /*
  2. */
  3.  
  4. #pragma comment(linker, "/STACK:16777216")
  5. #include <fstream>
  6. #include <iostream>
  7. #include <string>
  8. #include <complex>
  9. #include <math.h>
  10. #include <set>
  11. #include <vector>
  12. #include <map>
  13. #include <queue>
  14. #include <stdio.h>
  15. #include <stack>
  16. #include <algorithm>
  17. #include <list>
  18. #include <ctime>
  19. #include <memory.h>
  20. #include <ctime>
  21.  
  22. #define y0 sdkfaslhagaklsldk
  23. #define y1 aasdfasdfasdf
  24. #define yn askfhwqriuperikldjk
  25. #define j1 assdgsdgasghsf
  26. #define tm sdfjahlfasfh
  27. #define lr asgasgash
  28.  
  29. #define eps 1e-6
  30. //#define M_PI 3.141592653589793
  31. #define bs 1000000007
  32. #define bsize 256
  33. #define right adsgasgadsg
  34. #define free adsgasdg
  35.  
  36. using namespace std;
  37.  
  38. long long n;
  39. double cost[1<<18];
  40. long long a,b;
  41. vector<long long> g[1<<18];
  42. long long used[1<<18];
  43. double ans[1<<18];
  44. long sz[1<<18];
  45. long long par[1<<18];
  46. double upans[1<<18];
  47. double tans[1<<18];
  48.  
  49. void dfs(long v)
  50. {
  51. used[v]=1;
  52. vector<long> sons;
  53. for (int i=0;i<g[v].size();i++)
  54. {
  55. long q=g[v][i];
  56. if (used[q])continue;
  57. par[q]=v;
  58. dfs(q);
  59. sons.push_back(q);
  60. }
  61. sz[v]=sons.size();
  62. for (int i=0;i<sons.size();i++)
  63. {
  64. long q=sons[i];
  65. ans[v]+=(ans[q]+cost[q])*1.0/sz[v];
  66. }
  67. }
  68.  
  69. void solve(long v)
  70. {
  71. used[v]=1;
  72. if (par[v])
  73. {
  74. long q=par[v];
  75. double pup=1./(sz[q]);
  76. upans[v]=upans[q]*pup;
  77. // cout<<v<<"^"<<upans[v]<<endl;
  78. if (sz[q]>1)upans[v]+=(ans[q]*sz[q]-ans[v]-cost[v])/(sz[q]);
  79. // cout<<v<<"^^"<<upans[v]<<endl;
  80. upans[v]+=cost[q];
  81. tans[v]=(ans[v]*sz[v]+upans[v])/(sz[v]+1)+cost[v];
  82. }
  83. else // root
  84. tans[v]=ans[v]+cost[v];
  85.  
  86. for (int i=0;i<g[v].size();i++)
  87. {
  88. long q=g[v][i];
  89. if (used[q])continue;
  90. solve(q);
  91. }
  92. }
  93.  
  94. int main(){
  95. //freopen("repair.in","r",stdin);
  96. //freopen("repair.out","w",stdout);
  97. //freopen("C:/input.txt","r",stdin);
  98. //freopen("C:/output.txt","w",stdout);
  99. ios_base::sync_with_stdio(0);
  100. //cin.tie(0);
  101.  
  102. cin>>n;
  103. //if (n>1600)return 1;
  104. for (int i=1;i<=n;i++)
  105. {
  106. cin>>cost[i];
  107. //cost[i]=1000000;
  108. //if (i==n/2+1)cost[i]=1;
  109. }
  110.  
  111. for (int i=1;i<n;i++)
  112. {
  113. cin>>a>>b;
  114. // a=i;
  115. // b=i+1;
  116. g[a].push_back(b);
  117. g[b].push_back(a);
  118. }
  119.  
  120. int id=rand()%n+1;
  121.  
  122. //cout<<id<<endl;
  123. dfs(id);
  124. /*
  125. for (int i=1;i<=n;i++)
  126. cout<<ans[i]<<" ";
  127. cout<<endl;
  128. */
  129. for (int i=1;i<=n;i++)
  130. used[i]=0;
  131.  
  132. solve(id);
  133. /*
  134. for (int i=1;i<=n;i++)
  135. cout<<ans[i]<<" ";
  136. cout<<endl;*/
  137. /*
  138. for (int i=1;i<=n;i++)
  139. cout<<sz[i]<<"*";
  140. cout<<endl;
  141. *//*
  142. cout<<"^"<<endl;
  143. */
  144. /*
  145. for (int i=1;i<=n;i++)
  146. cout<<upans[i]<<" ( ";//endl;
  147.  
  148. cout<<endl;
  149.  
  150. for (int i=1;i<=n;i++)
  151. cout<<fixed<<tans[i]<<" ";
  152. cout<<endl;
  153. */
  154. // if (n==1)return 1;
  155. long er=0;
  156. long bp=1;
  157. for (int i=1;i<=n;i++)
  158. if(tans[i]<tans[bp]-eps)bp=i;
  159. for (int i=1;i<=n;i++)
  160. if (fabs(tans[i]-tans[bp])<0.4)er++;
  161. if (er>1)while (true);//return 1;
  162. cout<<bp<<endl;
  163. cin.get();cin.get();
  164. return 0;}
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement