E. Gardener and Tree(拓扑排序)

news2024/11/22 18:24:26

Problem - 1593E - Codeforces

树是一个无定向的连接图,其中没有循环。这个问题是关于无根的树。一棵树的叶子是一个顶点,它最多与一个顶点相连。

园丁维塔利用n个顶点种了一棵树。他决定对这棵树进行修剪。为了做到这一点,他进行了一些操作。在一次操作中,他删除了树的所有叶子。

树的例子。


例如,考虑上图中所示的树。下图显示了对该树精确应用一个操作的结果。

 

 

对树应用 "移除所有树叶 "操作的结果。
注意该操作的特殊情况。

对一棵空树(0个顶点)应用操作,不会改变它。
对有一个顶点的树应用操作,会删除这个顶点(这个顶点被当作叶子)。
对一棵有两个顶点的树进行操作,会删除这两个顶点(这两个顶点都被视为叶子)。
维塔利在树上依次应用了k个操作。还剩下多少个顶点?

输入
第一行包含一个整数t(1≤t≤104)--测试案例的数量。接着是t个测试用例。

每个测试用例前面都有一个空行。

每个测试用例由几行组成。测试用例的第一行包含两个整数n和k(1≤n≤4⋅105,1≤k≤2⋅105)--分别为树中顶点的数量和操作的数量。然后是n-1条线,每条线包含两个整数u和v(1≤u,v≤n, u≠v),描述一对由边连接的顶点。可以保证给定的图是一棵树,没有循环或多条边。

保证所有测试案例的n之和不超过4⋅105。

输出
对于每个测试用例,在单独的一行中输出一个整数--应用k操作后树中剩余的顶点数量。

例子
InputCopy
6

14 1
1 2
2 3
2 4
4 5
4 6
2 7
7 8
8 9
8 10
3 11
3 12
1 13
13 14

2 200000
1 2

3 2
1 2
2 3

5 1
5 1
3 2
2 1
5 4

6 2
5 1
2 5
5 6
4 2
3 4

7 1
4 3
5 1
1 3
6 1
1 7
2 1
输出拷贝
7
0
0
3
1
2
备注
第一个测试案例是在声明中考虑的。

第二个测试案例包含一棵有两个顶点的树。对它进行了200000次操作。第一个操作删除了所有两个顶点,其他操作不改变树。

在第三个测试案例中,给出了一棵有三个顶点的树。第一个操作的结果是,其中只剩下一个顶点(索引为2),第二个操作使树变空。

题解:
仔细想想每个叶子节点的入度都为1,每次删除所有的叶子节点,再找到入度为1的节点,这不就是拓扑排序吗(淦)

无非多了一个条件,进行找链长为k的停止

(写题时竟然完全没往这方面想)

#include<iostream>
#include<vector>
#include<queue>
#include<cstring>
#include<algorithm>
#include<string>
#include<map>
using namespace std;
#define int long long
char s[1000060];
vector<int> p[400050];
int cnt[400050];
int f[400040];
void solve()
{
//	ios::sync_with_stdio(false);
//	cin.tie(0);
//	cout.tie(0);
	int n,k;
	cin >> n >>k;
	for(int i = 1;i <= n;i++)
	{
		p[i].clear();
		cnt[i] = 0;
		f[i] = 0;
	}
	for(int i = 1;i < n;i++)
	{
		int x,y;
		cin >> x>>y;
		p[x].push_back(y);
		p[y].push_back(x);
		cnt[x]++;
		cnt[y]++;
	}
	if(n == 1)
	{
		if(k >= 1)
		{
			cout<<"0\n";
		}
		else
		{
			cout<<"1\n";
		}
		return ;
	}
	queue<pair<int,int>> q;
	for(int i = 1;i <= n;i++)
	{
		if(cnt[i] == 1)
		{
			q.push({i,1});
		}
	}
	while(q.size())
	{
		auto t = q.front();
		q.pop();
		f[t.first] = 1;
		for(auto j:p[t.first])
		{
			cnt[j] --;
			if(cnt[j] == 1)
			{
				if(t.second + 1 <= k)
				{
					q.push({j,t.second+1});
				}
			}
		}
	}
	int ans = 0;
	for(int i = 1;i <= n;i++)
	{
		if(!f[i])
		{
			ans ++;
		}
	}
	cout << ans<<"\n";
	
}
signed main()
{
	int t = 1;
	cin >> t;
	while(t--)
	{
		solve();
	}
} 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/53938.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

云原生应用的最小特权原则

IDC 预计&#xff0c;从现在到 2024 年初&#xff0c;将开发和部署 5 亿个新应用程序——超过过去 40 年的总和。 Gartner 预测&#xff0c;到 2025 年&#xff0c;75% 的企业将运行某种容器化应用程序。 现代应用程序需要现代安全性。 公共云供应商非常积极地提升平台安全性&…

JAVA培训之连接查询之子查询

子查询就是嵌套查询&#xff0c;即SELECT语句中包含SELECT语句&#xff0c;如果一条语句中存在两个&#xff0c;或两个以上SELECT&#xff0c;那么就是子查询语句了。 子查询出现的位置&#xff1a; Where子句中&#xff0c;作为条件存在&#xff1b;from后&#xff0c;作为表…

Bootstrap学习(十一)

模态框使用&#xff1a; tab标签页组件 模态框使用&#xff1a; 有属性、方法、事件 fade显示时的渐变动画可加可不加&#xff0c;role是屏幕辅助设备用的 aria-lable屏幕辅助设备用的 静态的模态框是不展示的&#xff0c;需要调用展示方法才能展示 在中心内容放一个表单&…

Transformer Encoder-Decoer 结构回顾

有关于Transformer、BERT及其各种变体的详细介绍请参照笔者另一篇博客&#xff1a;最火的几个全网络预训练模型梳理整合&#xff08;BERT、ALBERT、XLNet详解&#xff09;。 本文基于对T5一文的理解&#xff0c;再重新回顾一下有关于auto-encoder、auto-regressive等常见概念&…

Elasticsearch 安装及启动【Windows】

一、下载 Elasticsearch 官网下载地址&#xff1a;https://www.elastic.co/cn/downloads/past-releases#elasticsearch 选择自己所需版本进行下载&#xff0c;这里以Elasticsearch 8.2.2 为例 点击 Download&#xff0c;选择 Windows 版本 二、使用步骤 1.安装 Elasticse…

大数据培训课程WordCount案例实操

WordCount案例实操 1&#xff0e;需求 在给定的文本文件中统计输出每一个单词出现的总次数 &#xff08;1&#xff09;输入数据 &#xff08;2&#xff09;期望输出数据 atguigu 2 banzhang 1 cls 2 hadoop 1 jiao 1 ss 2 xue 1 2&#xff0e;需求分析 …

如何看待越来越多人报名参加软考?

可以肯定的告诉你软考证书是有用的。 但是软考证书如果对于自己今后的职业生涯规划也有帮助&#xff0c;和你的职业发展和需求相匹配&#xff0c;那才能发挥软考证书最大的优势。 软考证书的用处体现在哪里&#xff1f; 1、证书认可度高 软考是一种简称&#xff0c;全称是计…

变分推断(Variational Inference)解析

一、什么是变分推断 假设在一个贝叶斯模型中&#xff0c;xxx为一组观测变量&#xff0c;zzz为一组隐变量&#xff08;参数也看做随机变量&#xff0c;包含在zzz中&#xff09;&#xff0c;则推断问题为计算后验概率密度P(z∣x)P(z|x)P(z∣x)。根据贝叶斯公式&#xff0c;有&am…

如何使用向导创建Openflow 流表-网络测试仪实操

使用向导创建Openflow中的FlowTable&#xff0c;按照下面的步骤&#xff1a; 1、打开Renix软件&#xff0c;连接机框并预约测试端口&#xff1b; 2、配置一个IPv4接口 3、配置一个OpenFlowController绑定步骤二中的IPv4接口 4、创建一条RAW流&#xff08;这条流中包含FlowTabl…

虹科QA | SWCF2022 11月29日演讲笔记:卫星传输链路中的关键技术分享

虹科2022年度SWCF卫星通信与仿真测试研讨会正在进行中。昨日精彩演讲&#xff1a;卫星传输链路中的关键技术分享&#xff0c;感谢大家的观看与支持&#xff01; 昨晚的直播间收到一些粉丝的技术问题&#xff0c;我们汇总了热点问题并请讲师详细解答&#xff0c;在此整理分享给…

2022年十一届认证杯(小美赛)C题思路新鲜出炉

对人类活动进行分类 人类行为理解的一个重要方面是对日常活动的识别和监控。一个可穿戴的活动识别 系统可以提高许多关键领域的生活质量&#xff0c;如动态监测、家庭康复和跌倒检测。基于 惯性传感器的活动识别系统用于监测和观察老年人远程个人报警系统[1]&#xff0c;检测和…

结合RocketMQ 源码,带你了解并发编程的三大神器

摘要&#xff1a;本文结合 RocketMQ 源码&#xff0c;分享并发编程三大神器的相关知识点。本文分享自华为云社区《读 RocketMQ 源码&#xff0c;学习并发编程三大神器》&#xff0c;作者&#xff1a;勇哥java实战分享。 这篇文章&#xff0c;笔者结合 RocketMQ 源码&#xff0…

WRF模式行业应用问题解析及辅助学习

>>> 高精度气象模拟软件WRF(Weather Research Forecasting)技术及案例应用 今天小编给大家整理了WRF模式行业应用问题解析&#xff0c;不管是正在应用WRF还是入门小白&#xff0c;都建议多听一些行业问题&#xff0c;借鉴及深入了解&#xff0c;以下摘抄了个别问题&a…

5. 线性回归的从零开始实现

1.生成数据集 # num_examples 表示样本数量&#xff0c;也就是房屋数量 # w是权重向量 def synthetic_data(w, b, num_examples): #save"""生成yXwb噪声"""# X是一个从独立的正态分布中抽取的随机数的张量&#xff0c;正态分布的平均值为0、标…

双十二怎么入手,几款性能好物分享

过完了双十一&#xff0c;接下来就应该面临今年最后一个大优惠力度的双十二了&#xff0c;而且双十二的时间刚好靠近在过年&#xff0c;所以在这期间相信很多人购买的物品是更加偏向于家居用品方面&#xff0c;那么就不能够错过本篇文章了&#xff0c;本篇文章将为你们分享一些…

[附源码]计算机毕业设计springboot松林小区疫情防控信息管理系统

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

sonarqube安装

Sonarqube安装文档 1. 环境准备 参照官方文档Prerequisites and Overview | SonarQube Docs 安装符合sonarqube版本的JDK和数据库 目前服务器上JDK版本为11.0.2 sonarqube版本为9.1.0 postgresql版本为13.7 2. 安装JDK11.0.2 将openjdk-11.0.2_linux-x64_bin.tar.gz放到/usr/…

spring详解(一)

今天我们来学习一个新的框架spring!!! spring是什么呢? spring是2003年兴起的,是一款轻量级、非侵入式的IOC和AOP的一站式的java开发框架&#xff0c;为简化企业即开发而生。 轻量级&#xff1a;spring核心功能的jar包不大 非侵入式&#xff1a;我们的业务代码不需要继承或…

linux parted 方式挂盘,支持大于4T盘扩容

此 内容与之前的linux mbr转gpt格式有些重复&#xff0c;但为了便于查询&#xff0c;还是单抽出相关内容&#xff0c;进行操作&#xff1a; 1.查询要挂的有磁盘路径, 输入 parted -l 。 2 . 进入parted对/dev/vdb盘的交互方式&#xff1a;输入&#xff1a; parted /dev/vdb&am…

Spring Cloud Gateway 网关组件及搭建实例

Spring Cloud Gateway 是 Spring Cloud 团队基于 Spring 5.0、Spring Boot 2.0 和 Project Reactor 等技术开发的高性能 API 网关组件。Spring Cloud Gateway 旨在提供一种简单而有效的途径来发送 API&#xff0c;并为它们提供横切关注点&#xff0c;例如&#xff1a;安全性&am…