/ Joy OI / 题目列表 /
没有上司的舞会
题目限制
时间限制 内存限制 评测方式 题目来源
1000ms 131072KiB 标准比较器 Local
题目描述
Ural大学有N个职员,编号为1~N。他们有从属关系,也就是说他们的关系就像一棵以校长为根的树,父结点就是子结点的直接上司。每个职员有一个快乐指数。现在有个周年庆宴会,要求与会职员的快乐指数最大。但是,没有职员愿和直接上司一起与会。 输入格式
第一行一个整数N。(1<=N<=3000)
接下来N行,第i+1行表示i号职员的快乐指数Ri。(-128<=Ri<=127)
接下来N-1行,每行输入一对整数L,K。表示K是L的直接上司。
最后一行输入0,0。 输出格式
输出最大的快乐指数。 样例数据
输入样例 #1 输出样例 #1
7
1
1
1
1
1
1
1
1 3
2 3
6 4
7 4
4 5
3 5
0 0
5

第一次用NOI Linux写题,诸多不适应,就当练练手了。

不过emacs的C-P C-N C-F C-B 真的很好用!

简单的树形DP。

f[i][0/1] i节点选或不选。

#include<iostream>

using namespace std;

cosnt int MAXN=10000;

struct Edge{
int next,to;
}e[MAXN];
int ecnt,head[MAXN];
inline void add(int x,int y){
e[++ecnt].next = head[x];
e[ecnt].to = y;
head[x] = ecnt;
} int n,root;
int hp[MAXN];
int ind[MAXN];
int f[MAXN][2]; void dfs(int x,int pre){
f[x][1]=hp[x];
for(int i=head[x];i;i=e[i].next){
int v=e[i].to;
if(v==pre) continue;
dfs(v,x);
f[x][0]+=max(f[v][1],f[v][0]);
f[x][1]+=f[v][0];
}
} int main(){
cin>>n;
for(int i=1;i<=n;i++){
cin>>hp[i];
}
for(int i=1;i< n;i++){
int x,y;
cin>>x>>y;
add(x,y);add(y,x);
ind[x]++;ind[y]++;
}
for(int i=1;i<=n;i++)
if(ind[i]>1) continue;
else {root=i;break;}
dfs(root,-1);
cout<<max(f[root][1],f[root][0])<<endl;
return 0;
}

最新文章

  1. C++ 画星号图形——空心矩形(核心代码记录)
  2. IOS开发_中遍历数组的方法及比较
  3. JS字符处理
  4. Linux Bash终端支持中文显示
  5. SVM原理(1)
  6. Xcode 的正确打开方式——Debugging(转)
  7. win8系统特别慢的基本判断方法
  8. QT Creater与libusb使用
  9. Robots惊恐记
  10. JAVA设计模式:单例设计
  11. SimpleDateFormat使用和线程安全问题
  12. myeclipse取消js校验
  13. java网络编程(3)——UDP
  14. Java开发必须掌握的线上问题排查命令
  15. docker容器日志收集方案汇总评价总结
  16. codeforces645B
  17. 去掉ambiguous expansion of macro警告
  18. CRM WEB UI 03搜索界面新建按钮调到详细界面
  19. Docker容器硬盘动态扩容
  20. 【Mac双系统设置系统默认启动系统】解决方式

热门文章

  1. hdu 3007【最小圆覆盖-随机增量法模板】
  2. P3162 [CQOI2012]组装
  3. Ocelot(十一)- 服务发现
  4. PHP简单实现单点登录功能示例
  5. 进击的Python【第十六章】:Web前端基础之jQuery
  6. C#不允许在foreach循环中改变数组或集合中元素的值(注:成员的值不受影响)
  7. ubuntu14.04 + GTX980ti + cuda 8.0 ---Opencv3.1.0(基础+opecv_contrib)配置
  8. APP增量更新
  9. libtool版本过新的问题
  10. Kali linux 2016.2(Rolling)里的枚举服务