题目连接:http://acm.hdu.edu.cn/showproblem.php?pid=1520

题意:有N个人,N-1个人有自己的上司,每个人有一个快乐值,如果这个人参加了聚会,那么这个人的直接上司将不嫩参加,问最大的快乐值为多少

题解:入门的树形DP题,dp[i][0]表示第i个人不去,dp[i][1]表示第i个人去。

 #include<cstdio>
#define FFC(i,a,b) for(int i=a;i<=b;i++)
#define max(a,b) ((a)>(b)?(a):(b))
const int maxn=;
int n,c[maxn],v[maxn],g[maxn],nxt[maxn],ed,xx,yy,ik,f[maxn],root,dp[maxn][];
void adg(int x,int y){v[++ed]=y,nxt[ed]=g[x],g[x]=ed;}
void fuck(int now){
dp[now][]=c[now];
for(int i=g[now];i;i=nxt[i]){
fuck(v[i]);
dp[now][]+=max(dp[v[i]][],dp[v[i]][]);
dp[now][]+=dp[v[i]][];
}
}
int main(){
while(~scanf("%d",&n)){
FFC(i,,n)scanf("%d",&c[i]);
for(ik=ed=,root=;ik<=n;ik++)g[ik]=,f[ik]=ik;
while(scanf("%d%d",&xx,&yy),xx+yy)adg(yy,xx),f[xx]=yy;
FFC(i,,n)dp[i][]=dp[i][]=;
while(f[root]!=root)root=f[root];
fuck(root);
printf("%d\n",max(dp[root][],dp[root][]));
}
return ;
}

最新文章

  1. CSS手动改变DIV高宽
  2. sql-ASCII函数运用
  3. office project 激活
  4. iOS - 日期的时间差(某年某月某日的某一天。。。)
  5. 如何用ZBrush雕刻出栩栩如生的头发(二)
  6. 《深入Java虚拟机学习笔记》- 第3章 安全
  7. win32多线程学习总结:同步机制critical sections
  8. 【UVA1331】关于最优三角剖分
  9. SQL 查询字段为值不为空
  10. Python简记
  11. WAV音频格式分析
  12. 5.3、Android Studio录像
  13. 手把手教你画一个 逼格满满圆形水波纹loadingview Android
  14. 质量:“PM,你怎么可以放弃我?!”
  15. JSON字符串解析成JSON数据格式
  16. kubernetes核心组件kube-proxy 学习总结
  17. 20135316王剑桥Linux内核学习记笔记第七周
  18. JS实现ul,li排序效果
  19. ORACLE的init.ora配置文件中参数详解
  20. 模仿qq列表信息滑动删除效果

热门文章

  1. maven GroupId 和ArtifactId的含义
  2. 小demo--横向+展开菜单,支持m站
  3. hello world2
  4. npm 使用代理
  5. # 欢迎使用Markdown编辑器写博客
  6. Matches Puzzle Game
  7. 利用Fiddler抓取websocket包
  8. 《JS中的面向对象技术》
  9. AuthenticationManager, ProviderManager 和 AuthenticationProvider
  10. 字符串匹配&mdash;KMP 扩展KMP Manacher