比赛 20111109 评测结果 WWWWWWWWWW
题目名称 火车站饭店 最终得分 0
用户昵称 wangmengyuan 运行时间 0.000 s
代码语言 C++ 内存使用 0.00 MiB
提交时间 2011-11-09 11:16:32
显示代码纯文本
  1. #include<iostream>
  2. #include<cstdio>
  3. #include<cstdlib>
  4. #define max(a,b) ((a)>=(b)?(a):(b))
  5. using namespace std;
  6. int w[100001],n,m;
  7. int q[100001][2],a[100001][51];
  8. int ji[100001]={0};
  9. bool used[100001]={0};
  10. void dp(int x);
  11. int main()
  12. {
  13. freopen ("profitz.in","r",stdin);
  14. freopen ("profitz.out","w",stdout);
  15. scanf("%d",&n);
  16. for (int o=1;o<=n;o++)
  17. {
  18. scanf("%d",&w[o]);
  19. }
  20. for (int o=1;o<=n-1;o++)
  21. {
  22. int c,d;
  23. scanf("%d%d",&c,&d);
  24. ji[c]++;
  25. ji[d]++;
  26. a[c][ji[c]]=d;
  27. a[d][ji[d]]=c;
  28. }
  29. dp(1);
  30. if (q[1][0]>q[1][1])
  31. {
  32. cout<<q[1][0];
  33. }
  34. else
  35. {
  36. cout<<q[1][1];
  37. }
  38. return 0;
  39. }
  40. void dp(int x)
  41. {
  42. used[x]=1;
  43. for (int i=1;i<=ji[x];i++)
  44. {
  45. if (!used[a[x][i]])
  46. {
  47. dp(a[x][i]);
  48. q[x][0]+=max(q[a[x][i]][0],q[a[x][i]][1]);
  49. q[x][1]+=max(q[x][1],w[x]+q[a[x][i]][0]);
  50. }
  51. }
  52. used[x]=0;
  53. }