博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
bzoj2783
阅读量:6942 次
发布时间:2019-06-27

本文共 1230 字,大约阅读时间需要 4 分钟。

由于路径的深度是升序的

所以我们可以考虑用前缀和的思想,用sum维护点到根路径上节点和
对于每个点x存在路径和为s即这个点到根的路径上存在y,使sum[x]-sum[y]=s
这显然是可以二分的

1 type node=record 2        po,next:longint; 3      end; 4  5 var w:array[0..100010] of node; 6     q,s,a,p:array[0..100010] of longint; 7     len,t,n,m,x,y,ans,i:longint; 8  9 procedure add(x,y:longint);10   begin11     inc(len);12     w[len].po:=y;13     w[len].next:=p[x];14     p[x]:=len;15   end;16 17 function find(l,r,x:longint):boolean;18   var m:longint;19   begin20     while l<=r do21     begin22       m:=(l+r) shr 1;23       if s[q[m]]=x then exit(true);24       if s[q[m]]>x then r:=m-1 else l:=m+1;25     end;26     exit(false);27   end;28 29 procedure dfs(x:longint);30   var i,y:longint;31   begin32     inc(t);33     q[t]:=x;34     i:=p[x];35     while i<>0 do36     begin37       y:=w[i].po;38       s[y]:=s[x]+a[y];39       if find(0,t,s[y]-m) then inc(ans);40       dfs(y);41       i:=w[i].next;42     end;43     dec(t);44   end;45 46 begin47   readln(n,m);48   for i:=1 to n do49     read(a[i]);50   for i:=1 to n-1 do51   begin52     readln(x,y);53     add(x,y);54   end;55   s[1]:=a[1];56   q[0]:=0;57   s[0]:=0;58   dfs(1);59   writeln(ans);60 end.
View Code

 

转载于:https://www.cnblogs.com/phile/p/4473108.html

你可能感兴趣的文章
加密货币 (Cryptocurrency) 市值 (market capitalization) 列表
查看>>
julia应用于自动驾驶汽车、机器人、3D 打印、精准医疗、增强现实、基因组学、能源交易、机器学习、金融风控和太空任务设计等多个领域...
查看>>
Go Web:数据存储(3)——gob对象序列化
查看>>
协同过滤的几点思考
查看>>
multiple levlve proxy route deploy
查看>>
父窗体刷新子窗体
查看>>
MSSQL 数据页查询使他 DBCC PAGE 详细说明
查看>>
(转)数据库范式那些事
查看>>
DES加密GUID+文件名称,关于DES加密后文件长度是否超过WINDOWS文件命名规定长度255个字节。...
查看>>
10款HTML5编码简化工具
查看>>
SQLite在多线程环境下的应用
查看>>
JQuery 原理
查看>>
POJ---1860 Currency Exchange[套汇问题SPFA()正权回路的判定]
查看>>
(转)2个高效存储过程分页及对比
查看>>
as3翻牌动画
查看>>
VirtualTreeview 参考
查看>>
lsof,ulimit,
查看>>
Windows几种线程同步方法介绍
查看>>
有效提高命中率的缓存设计
查看>>
Xamarin 获融资1200万美元
查看>>