题目链接:http://poj.org/problem?id=2342

dp[i][0/1]表示以i为根的子树,选或不选根,所能得到的最大rating和。

显然

dp[i][0]=∑max(dp[son][0],dp[son][1])

dp[i][1]=val[i]+∑dp[son][0]

#include<cstdio>
#include<vector>
#include<cstring>
using namespace std; const int maxn=;
int v[maxn];
int p[maxn];
vector<int> G[maxn];
int dp[maxn][]; void dfs(int u)
{
dp[u][]=;
dp[u][]=v[u];
for (int i=;i<G[u].size();i++)
{
dfs(G[u][i]);
dp[u][]+=max(dp[G[u][i]][],dp[G[u][i]][]);
dp[u][]+=dp[G[u][i]][];
}
} int main()
{
int n;
while (scanf("%d",&n) && n)
{
memset(p,-,sizeof(p));
for (int i=;i<=n;i++) G[i].clear();
for (int i=;i<=n;i++) scanf("%d",&v[i]);
for (int i=;i<=n-;i++)
{
int u,fa;
scanf("%d%d",&u,&fa);
p[u]=fa;
G[fa].push_back(u);
}
int root;
for (int i=;i<=n;i++) if (p[i]==-) root=i;
dfs(root);
printf("%d\n",max(dp[root][],dp[root][]));
}
return ;
}

最新文章

  1. GOLANG 常用命令
  2. Javascript参考手册
  3. 如何把项目部署到OSChina上
  4. [转]silverlight Datagrid 行上增加ToolTip
  5. Effective Java 11 Override clone judiciously
  6. 【poj1113】 Wall
  7. protected 和default的区别
  8. Dapper.NET - ORM(ibatis.Net)
  9. Qt 学习之路 :使用 QJson 处理 JSON
  10. 图论(差分约束系统):POJ 1201 Intervals
  11. Python 单词字母顺序不变且所有倒排
  12. 【Linux CentOS 在虚拟机中XShell出现: (port 22): Connection failed.】
  13. CodeForces 132C Logo Turtle (记忆化搜索)
  14. 在 Visual C++ 中开发自定义的绘图控件
  15. PS中如何把图片颜色加到字体上去
  16. IOS端 margin-top 和 margin-bottom 使用负数时的区别
  17. A - Arcade Game Gym - 100814A (概率思维题)
  18. python 爬虫系列教程方法总结及推荐
  19. 6.关于Xamarin Android对APK包大小的处理
  20. /usr/bin/curl: Argument list too long的解决方法

热门文章

  1. DHT11资料
  2. 完全数--Python
  3. CERC2017 Gambling Guide,最短路变形,期望dp
  4. 异步消息处理(Message, Handler, MessageQueue, Looper)
  5. Altium Designer -- 精心总结
  6. Hibernate-ORM:09.Hibernate中的getCurrentSession()
  7. hdu4742 Pinball Game 3D
  8. Delphi7目录结构----初学者参考
  9. 自动化测试(一)-get和post的简单应用
  10. java 读取配置文件 与更新