Kefa and Park

CodeForces - 580C

一棵以1为根的树,树上有些点是红的。一个叶子是合法的当且仅当从根到它的路径上出现的连续红点个数不超过m。求有多少个叶子是合法的。Input
第一行两个整数n和m(2≤n ≤105,1≤m≤n) 
第二行n个整数0或1,如果是1,表示第i个点是红点。 
接下来n-1行,每行两个整数x和y,表示树上的一条边。Output输出满足条件的叶子节点数Examples

Input
4 1
1 1 0 0
1 2
1 3
1 4
Output
2
Input
7 1
1 0 1 1 0 0 0
1 2
1 3
2 4
2 5
3 6
3 7
Output
2

Note

第一个样例 红点已经被标记出来了。叶子节点是2,3,4. 编号为2的叶子节点不合法

第二个样例:  叶子节点是4, 5, 6, 7.其中 6,7不合法.

sol:暴力dfs是O(n)的,dfs时多记一个变量表示当前连续几个红点了,当然答案也可以从父亲那里转移

判断是否是叶子就要多记两个变量入度和出度,因为是双向边,所以in和out都为1的就是叶子

#include <bits/stdc++.h>
using namespace std;
typedef int ll;
inline ll read()
{
ll s=;
bool f=;
char ch=' ';
while(!isdigit(ch))
{
f|=(ch=='-'); ch=getchar();
}
while(isdigit(ch))
{
s=(s<<)+(s<<)+(ch^); ch=getchar();
}
return (f)?(-s):(s);
}
#define R(x) x=read()
inline void write(ll x)
{
if(x<)
{
putchar('-'); x=-x;
}
if(x<)
{
putchar(x+''); return;
}
write(x/);
putchar((x%)+'');
return;
}
#define W(x) write(x),putchar(' ')
#define Wl(x) write(x),putchar('\n')
const int N=,M=;
int n,m,Cor[N];
namespace Tree
{
int tot=,Next[M],to[M],head[M];
int Num[N],Indeg[N],Outdeg[N];
inline void add(int x,int y)
{
Indeg[y]++;
Outdeg[x]++;
Next[++tot]=head[x];
to[tot]=y;
head[x]=tot;
return;
}
inline void dfs(int x,int fa,int cnt)
{
int i;
Num[x]=max(Num[x],cnt);
for(i=head[x];i;i=Next[i]) if(to[i]!=fa)
{
Num[to[i]]=max(Num[to[i]],Num[x]);
if(Cor[to[i]])
{
dfs(to[i],x,cnt+);
}
else
{
dfs(to[i],x,);
}
}
return;
}
inline int Solve()
{
int i,ans=;
Num[]=Cor[];
dfs(,,Num[]);
for(i=;i<=n;i++) if(Indeg[i]==&&Outdeg[i]==)
{
if(Num[i]<=m) ans++;
}
return ans;
}
}
int main()
{
int i;
R(n); R(m);
for(i=;i<=n;i++) R(Cor[i]);
for(i=;i<n;i++)
{
int x=read(),y=read();
Tree::add(x,y);
Tree::add(y,x);
}
Wl(Tree::Solve());
return ;
}

codeforces580C的更多相关文章

随机推荐

  1. jmeter(十一)JDBC Request之Query Type

    工作中遇到这样一个问题: 需要准备10W条测试数据,利用jmeter中的JDBC Request向数据库中批量插入这些数据(只要主键不重复就可以,利用函数助手中的Random将主键的ID末尾五位数随机 ...

  2. arcgis_js_api_3.12的project实践

    esri.config.defaults.geometryService = new esri.tasks.GeometryService("http://localhost:6080/ar ...

  3. keystone系列五:keystone源码分析

    六 keystone架构 6.1 Keystone API Keystone API与Openstack其他服务的API类似,也是基于ReSTFul HTTP实现的. Keystone API划分为A ...

  4. Hive 表分区

    Hive表的分区就是一个目录,分区字段不和表的字段重复 创建分区表: create table tb_partition(id string, name string) PARTITIONED BY ...

  5. Crackme006 - 全新160个CrackMe学习系列(图文|视频|注册机源码)

    知乎:逆向驿站 原文链接 CrackMe006 | 难度适中适合练手 |160个CrackMe深度解析(图文+视频+注册机源码) crackme006,依然是delphi的,而且没壳子,条线比较清晰, ...

  6. IDEA启动服务阻塞,断点过程十分慢的问题

    使用debug无法启动项目但是使用run就可以启动程序,而且启动比以前的debug模式快的多 原因: 启动不了的原因是在项目中的方法上打了断点,导致项目无法继续编译 取消方法断点就可以了 在idea官 ...

  7. 继承:call、apply、bind方法

    javascript 中,call 和 apply 都是为了改变某个函数运行时的上下文(context)而存在的,换句话说,就是为了改变函数体内部 this 的指向. call,apply,bind这 ...

  8. 研究C语言的新型编译环境TCC

    C语言综合研究1 搭建一个tcc环境 研究过程: 问题引出:为什么要使用tcc环境,甚至连图形界面都没有,为什么要使用这样的化境? 按照我们学习的本质来讲,可能是为了体验C语言底层的相关特性,但是在研 ...

  9. 北航MOOC客户端

    我们的团队作业终于完成了,欢迎下载使用我们的北航MOOC手机客户端软件(Android端)——北航学堂,学习北航的公开课程. 安装包下载地址: http://pan.baidu.com/s/1jGvH ...

  10. linux 第七周 总结及实验

    姬梦馨 原创作品 <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 第七周 Linux内核如何装载和启动一 ...