2783: [JLOI2012]树
2015-12-18 18:31
330 查看
树上前缀和。。。。。。
每次访问一个节点的时候查询是否存在祖先的前缀和与该节点的前缀和之差为S,若有则答案+1,因为前缀和之差为一段树链的和,就酱。
用set维护一下就好了。
每次访问一个节点的时候查询是否存在祖先的前缀和与该节点的前缀和之差为S,若有则答案+1,因为前缀和之差为一段树链的和,就酱。
用set维护一下就好了。
#include<iostream> #include<cstdio> #include<cstring> #include<set> using namespace std; const int N=100000+5; multiset<int>s; struct Edge{int to,next;}e[N*2]; int head ,cnt,v ,S,sum ,ans; void ins(int u,int v){ e[++cnt].to=v;e[cnt].next=head[u];head[u]=cnt; } void dfs(int u){ if(s.find(sum[u]-S)!=s.end())ans++; s.insert(sum[u]); for(int i=head[u];i;i=e[i].next){ sum[e[i].to]=sum[u]+v[e[i].to]; dfs(e[i].to); } s.erase(s.find(sum[u])); } int main(){ int n;scanf("%d%d",&n,&S); s.insert(0); for(int i=1;i<=n;i++)scanf("%d",&v[i]); int from,to; for(int i=1;i<n;i++){ scanf("%d%d",&from,&to); ins(from,to); }sum[1]=v[1]; dfs(1); printf("%d",ans); return 0; }
相关文章推荐
- Shell 字符串比较
- MySQL索引的创建、删除和查看
- 语言模型srilm(一) 基本用法
- STM323中低功耗模式
- 极盗者-带你领略八项极限挑战(含代码)
- UIScrollView(Auto Layout)
- Android 工具类 - Log
- Java基础--多线程02
- How to set field values using Java reflection
- 数字签名是什么
- CCFlow & JFlow新版本中的节点设置与轨迹查看权限说明
- Akka边学边写(3)-- ByteString介绍
- 【转载】虫师『性能测试』文章大汇总
- log4j学习小例子
- Java基础--多线程01
- 单表查询
- xcode 4 导入Lib,Framework的方法,和Undefined symbols for architecture x86_64:的一种解决办法
- LayoutInflater的使用
- 深入剖析Android四大组件(八)——结束Activity的4个阶段
- UWP入门教程1——UWP的前世今生