【问题描述】

公司今天发薪,阿迪想与朋友们去餐厅庆祝一下。

他住在一个非常神奇的公园里,这个公园是一个根在顶点1,且由 个顶点组成的有根树,顶点1也就是他的住所。然而不幸的是,公园也有许多的猫,阿迪已经找出了所有包含猫的顶点。

公园的叶子顶点都有餐厅,阿迪想选择一家他可以去的餐厅,但很不幸,他非常害怕猫,因而如果从餐厅去往他家的路径上有连续包含猫的数量超过 m 时,他将不能去往这家餐厅。

你的任务是帮助他确认他能去的餐厅的数量。

【输入形式】

输入的第一行包含两个整数 n 和 m (2≤ ≤ 105,  1≤ m ≤ n),分别表示树的顶点数以及对于阿迪来说可以忍受的最大的包含猫的连续顶点数。

第二行包含 n 个整数 a1a2、...、an,这里的每个 ai 或者为0(顶点 i 无猫),或者为1(顶点 i 有猫)。

接下来的 n - 1 行包含用形式“xi  yi”(1≤ xi , yi ≤ nxi ≠ yi)表示的树的边,表示顶点xi和顶点yi之间有边相连。

【输出形式】

输出为一个整数,表示从阿迪家去往叶子顶点的路径上至多包含 m 只猫的叶子顶点的数量。

【样例输入1】

4 1
1 1 0 0
1 2
1 3
1 4

【样例输出1】

2

【样例输入2】

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

【样例输出2】

2

【样例说明】

很显然,树是具有个 n 顶点 n - 1 条边的连通图,有根树是有一个称为根的特殊顶点的树。

在样例一中

包含猫的顶点变为红色,餐厅在顶点2、3、4,阿迪不能去到在顶点2的餐厅。

在样例二中

餐厅在顶点4、5、6、7,阿迪不能去到6和7。

来源:580C

这个题学校oj的测试用例还有点小问题,先把代码放在这里

#include <bits/stdc++.h>
using namespace std;
#define MAXSIZE 200001
#define STARTSPOT 1typedef struct
{int parknum;bool cat[MAXSIZE];pair<int, int> arc[MAXSIZE];
} Graph;
Graph g;
int m, OK=0;
bool visited[MAXSIZE];void FindNearSpot(vector<int> &nearspot, int v) {for (int i=0; i<g.parknum-1; i++) {if (g.arc[i].first==v) nearspot.push_back(g.arc[i].second);if (g.arc[i].second==v) nearspot.push_back(g.arc[i].first); }
}void DFS(int v, int c, bool f) {//f=1此路还能走visited[v]=1;if (f) {//访问完本结点后的c和fif (g.cat[v]) c++;else c=0;if (c>m) f=0;}vector<int> nearspot;FindNearSpot(nearspot, v);int size=(int)nearspot.size();if (size==1&&v!=STARTSPOT) {//判断是否为叶子结点if (f) OK++;return;}for (int i=0; i<size; i++) if (!visited[nearspot[i]]) DFS(nearspot[i], c, f);
}int main() {cin>>g.parknum>>m;for (int i=1; i<=g.parknum; i++) cin>>g.cat[i];for (int i=0; i<g.parknum-1; i++) cin>>g.arc[i].first>>g.arc[i].second;DFS(STARTSPOT, 0, 1);cout<<OK<<endl;return 0;
}
#include <bits/stdc++.h>
using namespace std;
#define MAXSIZE 200001
#define START 1int n, m, r=0;
bool cat[MAXSIZE];
int visited[MAXSIZE];typedef struct nearspot
{int npt;nearspot* next;
} nearspot;
nearspot* arc[MAXSIZE];//邻接表void Insert(int host, int neighbor) {nearspot* p=new nearspot;p->next=arc[host]; p->npt=neighbor;arc[host]=p;
}void DFS(int s, int c, bool f) {visited[s]=1;if (f) {if (cat[s]) c++;else c=0;if (c>m) f=0;}nearspot* p=arc[s]; bool k=1;while (p) {if (!visited[p->npt]) {DFS(p->npt, c, f); k=0;}p=p->next;}if (k&&f) r++;
} int main() {cin>>n>>m; int a, b;for (int i=1; i<=n; i++) cin>>cat[i];for (int i=0; i<n-1; i++) {cin>>a>>b;Insert(a, b); Insert(b, a);}DFS(START, 0, 1); cout<<r<<endl;return 0;
}

有人说这个代码不对,奇怪了,学校后来更新了数据集,我自己已经过了。这里提供两种版本

,下面一个用的是邻接表的,应该会对才是。

实训五#5.5猫与餐厅的故事相关推荐

  1. 计算机word图文混编实训报告,实训五 Word 图文混排

    实训五 Word 图文混排 实训目的 一.掌握插入.设置图片的方法. 二.掌握艺术字的插入与设置方法. 三.学会绘制.编辑图形. 四.掌握邮件合并的方法. 教材内容 一.图文混排 1.插入剪贴画: ① ...

  2. [JSP暑假实训] 五.MyEclipse+Servlet+JSP实现火车票网站注册操作及登陆验证

    本系列文章是作者暑假给学生进行实训分享的笔记,主要介绍MyEclipse环境下JSP网站开发,包括JAVA基础.网页布局.数据库基础.Servlet.前端后台数据库交互.DAO等知识. 前一篇文章讲解 ...

  3. 实训五:交换机配置文件备份

    一.实验目的 1.了解什么是交换机的备份. 2.了解TFTP服务器的用法及备份命令. 3.了解TFTP服务器和FTP服务器使用的不同场所. 4.了解什么叫文件上传. 二.应用环境 1.对交换机做好相应 ...

  4. Dust3D项目实训五 | 基于modeloffscreenrender的画面渲染分析

    2021SC@SDUSC 目录 分析概括 模块功能 ​ 类函数基础 QSize类 QImage类 ModelOffscreenRender.h分析 ModelOffscreenRender.cpp R ...

  5. 【Python】驾驶类型聚类-Kmeans聚类算法和PCA降维算法——东北大学数据挖掘实训五

    题目:通过给出的驾驶员行为数据(trip.csv),对驾驶员不同时段的驾驶类型进行聚类,聚成普通驾驶类型,激进类型和超冷静型3类 . 利用Python的scikit-learn包中的Kmeans算法进 ...

  6. Java:实训五 常用实用类应用

    1.String类的常用方法应用编程 编写一个Java应用程序,判断两个字符串是否相同,判断字符串的前缀.后缀是否和某个字符串相同,按字典顺序比较两个字符串的大小关系,检索字符串,创建字符串,将数字型 ...

  7. 实训五 思科路由器端口的基本配置

    原理 思科路由器得命令行模式操作和交换机的基本一样,在此就不一一赘述了 路由器提供广域网接口(serial高速同步串口),使用V.35线缆连接广域网接口链路.在广域网连接时一端为DCE(数据通信设备) ...

  8. Atmel爱特梅尔AT89S52单片机开发实训装置,QY-DPJ12

    AT89S52是美国ATMEL公司生产的低电压,高性能CMOS 8位单片机,片内含8k bytes的可反复擦写的只读程序存储器(PEROM)和256 bytes的随机存取数据存储器(RAM)器件采用A ...

  9. 高级过程控制传热自动化实训装置

    ZN-CR1高级过程控制传热自动化实训装置 一.概述 ZN-CR1高级过程控制传热自动化实训装置,过程装备与控制工程是高等院校的一个工科专业, 换热实验是本专业一项十分重要的教学与科研内容.原专业的实 ...

最新文章

  1. Oracle 10g 应用补丁PSU 10.2.0.5.180717
  2. OSPF虚拟链路实验
  3. python画方波_今天学会傅里叶画画,明天就是初音未来 - 如何用Python和Blender画任意图形...
  4. 小程序获取form_id 与 小程序获取openid
  5. Flutter Raw Image Provider
  6. 开发模式下浏览器不支持ES6
  7. java中domain什么意思_java解析URL中domain、端口和协议的两种方法
  8. [CMMI]中型项目流程梳理
  9. canvas笔记-二次贝塞尔曲线与三次贝塞尔曲线的用法
  10. Jquery下拉效果
  11. pythoncontinue函数_Python continue语句
  12. 只有低价才是中国智能硬件的出路吗?
  13. DNS Server 的设置使用
  14. 基于STM32的小说阅读器
  15. adb网络连接调试,重启之后失效
  16. Linux打印服务-CUPS的安装、配置和使用
  17. Android 音视频难学?音视频(流媒体)开发学习也有套路
  18. 背代码可以学好编程吗?下面的回答看的我一脸懵逼!
  19. Linux系统编程-进程概念、进程管理、信号处理
  20. 作为投资者,这10个对冲策略你必须烂熟于心

热门文章

  1. VS2019未定义标识符detect该怎么解决
  2. Web安全—敏感信息泄露
  3. rpm安装Mysql的rpm包,提示/bin/sh is needed by MySql.rpm 错误的问题解决
  4. 【大数据面试题】(一)Hadoop 相关面试题总结
  5. taking address of temporary错误
  6. IDEA jjsp 404_IDEA 卡住buid(编译)不动的解决办法_java
  7. freemarker
  8. 未将对象引用到对象的实例
  9. ARM GIC中断控制器介绍
  10. 关于计算机网络实验心得体会以及两种错误情况