51nodP1378夹克老爷的愤怒
时间:2019-10-15
本文章向大家介绍51nodP1378夹克老爷的愤怒,主要包括51nodP1378夹克老爷的愤怒使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
将每一个点按照深度排序,每次取出深度最大的点,向上跳k个后再扩展标记.
#include<bits/stdc++.h>
#define il inline
#define rg register
#define gi read<int>
using namespace std;
const int O = 1e5 + 10;
struct Edge { int to, nt; } e[O << 1];
template<class TT>
il TT read() {
TT o = 0,fl = 1; char ch = getchar();
while (!isdigit(ch) && ch != '-') ch = getchar();
if (ch == '-') fl = -1, ch = getchar();
while (isdigit(ch)) o = o * 10 + ch - '0', ch = getchar();
return fl * o;
}
bool vis[O];
int n, k, cnt, mx, ans, head[O], f[O];
vector<int>G[O];
il void add(int u, int v) {
e[++cnt] = (Edge){v, head[u]};
head[u] = cnt;
}
il void dfs_dep(int u, int fa, int dep) {
f[u] = fa;
++dep;
G[dep].push_back(u);
if (mx < dep) mx = dep;
for (int i = head[u]; ~i; i = e[i].nt) {
int v = e[i].to;
if (v == fa) continue;
dfs_dep(v, u, dep);
}
}
il void dfs_mark(int u, int fa, int K) {
vis[u] = 1;
if (K++ == k) return;
for (int i = head[u]; ~i; i = e[i].nt)
if (e[i].to ^ fa) dfs_mark(e[i].to, u, K);
}
int main() {
memset(head, -1, sizeof head);
n = gi(), k = gi();
for (int i = 1; i < n; ++i) {
int u = gi(), v = gi();
add(u, v); add(v, u);
}
G[0].push_back(0);
dfs_dep(0, -1, 0);
for(int i = mx; i; --i) {
for (unsigned int j = 0; j < G[i].size(); ++j) {
int v = G[i][j];
if (vis[v]) continue;
for (int i = 1; i <= k; ++i)
if (f[v] != -1) v = f[v];
else break;
dfs_mark(v, -1, 0);
ans++;
}
}
printf("%d\n", ans);
return 0;
}
原文地址:https://www.cnblogs.com/lylyl/p/11681661.html
- BZOJ 1029: [JSOI2007]建筑抢修【优先队列+贪心策略】
- UVA 1030 - Image Is Everything【模拟+思维+迭代更新】
- C/C++中对链表操作的理解&&实例分析
- COGS 2482. Franky的胡子【二分,高精度】
- 【AlphaGo Zero 核心技术-深度强化学习教程代码实战02】理解gym的建模思想
- Kruscal(最小生成树)算法模版
- BZOJ 3680: 吊打XXX【模拟退火算法裸题学习,爬山算法学习】
- 区块链概况:什么是比特币
- 简化版桶排序操作模版
- BZOJ 3670: [Noi2014]动物园【KMP变形 】
- 【延迟注入】A5站长网某站存在SQL注入漏洞
- hihoCoder #1498 : Diligent Robots【数学】
- Codeforces Round #336 (Div. 2)【A.思维,暴力,B.字符串,暴搜,前缀和,C.暴力,D,区间dp,E,字符串,数学】
- 【防护】如何阻止SELECT * 语句
- 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 数组属性和方法