CF1593 E. Gardener and Tree(拓扑排序)
时间:2021-10-14
本文章向大家介绍CF1593 E. Gardener and Tree(拓扑排序),主要包括CF1593 E. Gardener and Tree(拓扑排序)使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
目录
Description
有一棵树,每次操作将叶子节点或根节点删除掉, \(k\) 此操作之后会剩下多少节点
State
\(1<=t<=10^4\)
\(1<=n<=4*10^5\)
\(1<=k<=2*10^5\)
Input
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
Output
7
0
0
3
1
2
Solution
思路是拓扑排序很容易知道,无向图中要避免一个节点放入重复放入队列(需要严格控制进队列的条件或 \(vis\) 数组判断)
$hint: $ 当只有一个节点的时候,答案应该是 \(0\)
Code
const int N = 4e5 + 5;
int n, m, k, _;
int a[N];
vector<int> v[N];
int into[N];
int vis[N];
void init()
{
for(int i = 1; i <= n; i ++){
v[i].clear();
into[i] = 0;
vis[i] = 0;
}
}
signed main()
{
// IOS;
rush(){
sdd(n, m);
int x, y;
init();
rep(i, 1, n - 1){
sdd(x, y);
v[x].pb(y);
v[y].pb(x);
into[x] ++;
into[y] ++;
}
if(n == 1){
pd(0);
continue;
}
int ans = n;
queue<int> q;
for(int i = 1; i <= n; i ++){
if(into[i] == 1){
q.push(i);
vis[i] = 1;
}
}
while(m --> 0 && ans){
int sz = q.size();
while(sz --> 0){
int u = q.front();
q.pop();
ans --;
for(auto it : v[u]){
if(vis[it]) continue;
into[it] --;
if(into[it] == 1){
q.push(it);
vis[it] = 1;
}
}
}
}
pd(ans);
}
// PAUSE;
return 0;
}
原文地址:https://www.cnblogs.com/Segment-Tree/p/15405508.html
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- [Go] Golang练习项目-GO语言实现选择排序
- 设计模式~策略模式
- Java单元测试框架(一)——JUnit4
- Java单元测试框架(二)——JUnit5
- 绘制双坐标轴图
- 用箭头和文字来标记重要的点
- 32.Python字符串方法split
- 程序员过关斩将--解决分布式session问题
- 常见的C编程段错误及对策
- Python 内置函数之——zip()
- js 将数据保存到本地
- MySQL遇见SELECT list is not in GROUP BY clause and contains nonaggre的问题
- 前置条件断言
- MySQL—数据类型与约束
- 重载、重写、重定义——三种同名函数的不同处理方式