记录编号 543854 评测结果 AAAAAAAAAA
题目名称 没有上司的舞会 最终得分 100
用户昵称 Gravatar王雨哈 是否通过 通过
代码语言 C++ 运行时间 0.019 s
提交时间 2019-10-10 21:14:46 内存使用 13.89 MiB
显示代码纯文本
  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. const int N=6010;
  4. int n,r;
  5. vector<int> tree[N];
  6. int h[N];
  7. int dp[N][2];
  8. int f[N];
  9. void dfs(int u)
  10. {
  11. dp[u][0]=0;
  12. dp[u][1]=h[u];
  13. for(int i=0;i<tree[u].size();i++)
  14. {
  15. int v=tree[u][i];
  16. dfs(v);
  17. dp[u][1]+=dp[v][0];
  18. dp[u][0]+=max(dp[v][0],dp[v][1]);
  19. }
  20. }
  21. int main()
  22. {
  23. freopen("partyy.in","r",stdin);
  24. freopen("partyy.out","w",stdout);
  25. scanf("%d",&n);
  26. memset(f,-1,sizeof(f));
  27. for(int i=1;i<=n;i++)
  28. scanf("%d",&h[i]);
  29. for(int i=1;i<=n;i++)
  30. {
  31. int a,b;
  32. scanf("%d%d",&a,&b);
  33. if(a!=0&&b!=0)
  34. {
  35. tree[b].push_back(a);
  36. f[a]=b;
  37. }
  38. }
  39. int root=1;
  40. while(f[root]!=-1)
  41. root=f[root];
  42. dfs(root);
  43. int a=max(dp[root][0],dp[root][1]);
  44. cout<<a;
  45. return 0;
  46. }