f[i,0] 表示 第i个人不参加舞会

f[i,1] 表示 第i个人参加舞会

f[i,1]=sigma(f[j,0])+v[i]   j 为 i 的孩子

f[i,1]=sigma(max(f[j,0],f[j,1]))   j 为 i 的孩子

ans=max(f[root,0],f[root,1])

Program CODEVS1380;
type arr=record
u,v,next:longint;
end;
const maxn=;
var eg:array[..maxn] of arr;
last:array[..maxn] of longint;
a:array[..maxn] of longint;
f:array[..maxn,..] of longint;
fa:array[..maxn] of longint;
i,n,u,v,j,root:longint;
procedure add(u,v:longint);
begin
inc(j);
eg[j].u:=u;
eg[j].v:=v;
eg[j].next:=last[u];
last[u]:=j;
end;
function max(a,b:longint):longint;
begin
if a>b then exit(a) else exit(b);
end;
procedure dfs(u:longint);
var i,v,sum1,sum2:longint;
begin
if last[u]=- then
begin
f[u,]:=;
f[u,]:=a[u];
exit;
end;
i:=last[u]; sum1:=; sum2:=;
while i<>- do
begin
v:=eg[i].v;
dfs(v);
sum1:=sum1+f[v,];
sum2:=sum2+max(f[v,],f[v,]);
i:=eg[i].next;
end;
f[u,]:=sum2;
f[u,]:=sum1+a[u];
end;
begin
readln(n);
j:=-;
for i:= to maxn do last[i]:=-;
for i:= to n do readln(a[i]);
readln(v,u);
while (v<>) and (u<>) do
begin
fa[v]:=u;
add(u,v);
readln(v,u);
end;
for i:= to n do if fa[i]= then root:=i;
dfs(root);
writeln(max(f[root,],f[root,]));
end.

最新文章

  1. JQuery 获得div绝对,相对位置的坐标方法
  2. VS的代码分析工具
  3. [Android Memory] App调试内存泄露之Context篇(上)
  4. 获取JDK动态代理/CGLIB代理对象代理的目标对象。
  5. Java学习第四篇:数组,排序,查找
  6. Java基础知识强化之网络编程笔记12:TCP之TCP协议上传文本文件并给出反馈
  7. AllocConsole
  8. UESTC_方老师的分身 II CDOJ 915
  9. qt学习001之运行对话框
  10. .NET Core 如何调用 WebService
  11. UVA1627-Team them up!(二分图判断+动态规划)
  12. couldn&#39;t locate lint-gradle-api-26.1.2.jar for flutter project
  13. SkylineGlobe SFS发布的WFS和WMS服务测试
  14. Hdu2204 Eddy&#39;s爱好 2017-06-27 16:11 43人阅读 评论(0) 收藏
  15. 【C++】不要依赖编译器的默认初始值
  16. python日记---day1
  17. phpcms 仿站小结
  18. nginx配置解决vue单页面打包文件大,首次加载慢的问题
  19. java学习笔记16--I/O流和文件
  20. IBM MQ 2035 或 2013认证错误的解决方法

热门文章

  1. ios 定位获取当前位置信息
  2. uva 1210
  3. JavaScript原生对象属性和方法详解——Array对象
  4. 近期C++编译问题汇总
  5. 【第41套测试题NOIP2007】【排序】【DP】【高精度】【树】【图上路径】
  6. 【STL】-Map/Multimap的用法
  7. VisualSVN SERVER的安装和使用
  8. lastPathComponent的功能
  9. java基础之hashmap
  10. git命令学习用