题意:

给定一颗有点权的树,每个树上的节点最多能走到lim[u]次,求一条路径,使路径上的点权和最大,每个节点上的点权如果走了多次只能算一次。还要求方案是否唯一。

思路:每个点只能取lim[u]-1个子树。因为每个子树只取1次或不取,考虑树形DP,dp[u]=dp[v1]+dp[v2]+...(加lim[u]-1)个,是排序后最大的。因为不一定要去满lim[u]-1个,如果负数就不走。

判多解:

1.儿子不唯一老子不唯一。

2.取得最后一个和不取的第一个dp值相等就不唯一。

3.取得里面有0就不唯一。

 var head,vet,next,lim:array[..]of longint;
dp,c,d,f,a:array[..]of int64;
n,m,i,x,y,tot:longint; procedure add(a,b:longint);
begin
inc(tot);
next[tot]:=head[a];
vet[tot]:=b;
head[a]:=tot;
end; procedure swap(var x,y:int64);
var t:int64;
begin
t:=x; x:=y; y:=t;
end; procedure qsort(l,r:longint);
var i,j:longint;
mid:int64;
begin
i:=l; j:=r; mid:=c[(l+r)>>];
repeat
while mid<c[i] do inc(i);
while mid>c[j] do dec(j);
if i<=j then
begin
swap(c[i],c[j]); swap(d[i],d[j]);
inc(i); dec(j);
end;
until i>j;
if l<j then qsort(l,j);
if i<r then qsort(i,r);
end; procedure dfs(u,pre:longint);
var e,v,i,m,j:longint;
begin
e:=head[u]; m:=;
while e<> do
begin
v:=vet[e];
if v<>pre then dfs(v,u);
e:=next[e];
end;
e:=head[u];
while e<> do
begin
v:=vet[e];
if v<>pre then begin inc(m); c[m]:=dp[v]; d[m]:=f[v]; end;
e:=next[e];
end;
if m> then qsort(,m);
dp[u]:=a[u];
f[u]:=; j:=;
for i:= to m do
begin
if (i>lim[u]-)or(c[i]<) then break;
inc(j);
dp[u]:=dp[u]+c[i];
if d[i]= then f[u]:=;
if c[i]= then f[u]:=;
end;
if (j>)and(j+<=m)and(c[j]=c[j+]) then f[u]:=;
for i:= to m do begin c[i]:=; d[i]:=; end;
end; begin readln(n);
for i:= to n do read(a[i]);
lim[]:=n;
for i:= to n do read(lim[i]);
for i:= to n- do
begin
readln(x,y);
add(x,y);
add(y,x);
end;
dfs(,);
writeln(dp[]);
if f[]= then writeln('solution is unique')
else writeln('solution is not unique'); end.

最新文章

  1. openurl 跳转
  2. /usr/bin/ld: cannot find -lz
  3. select的onChange事件问题解决
  4. Oracle 启用块跟踪
  5. 学习customEvent
  6. javascript 一些关于css操作的函数
  7. java web 初学
  8. Spark UI界面原理
  9. Android PackageManager源码浅析以及静默安装实现方式
  10. 转载:[Java面经]干货整理, Java面试题(覆盖Java基础,Java高级,JavaEE,数据库,设计模式等)
  11. Spring定义事物通知tx:advice
  12. 经常在比特币中看到的merkle树是什么?
  13. [leetcode]5. Longest Palindromic Substring最长回文子串
  14. python 进程锁
  15. 转:getContextPath、getServletPath、getRequestURI的区别
  16. APP案例分析之华为浏览器
  17. 域名DNS解析说明
  18. 一款基于jquery超炫的图片切换特效
  19. 周末大礼:jQuery技巧总结
  20. XML_CPP_ZC_libXml2

热门文章

  1. 学习JavaScript你必须掌握的8大知识点!
  2. GCD和NSThread延时执行对比
  3. 关于在vue 中使用百度ueEditor
  4. vue.js笔记1.0
  5. GoF23种设计模式之行为型模式之状态模式
  6. Meteor Shower POJ - 3669 (bfs+优先队列)
  7. excel日期格式取年份
  8. list_add_tail()双向链表实现分析
  9. Linux下查看USB设备信息
  10. 奇数结点升序偶数结点降序的单链表排序(Python实现)