搜索+思维 珂朵莉的值域连续段
来源:牛客网
珂朵莉给你一个有根树,求有多少个子树满足其内部节点编号在值域上连续 一些数在值域上连续的意思即其在值域上构成一个连续的区间
输入描述:
第一行有一个整数n,表示树的节点数。接下来n–1行,每行两个整数x,y,表示存在一条从x到y的有向边。输入保证是一棵有根树。
输出描述:
输出一个数表示答案
2 3
2 1
2 4
4 5
备注:
对于100%的数据,有n <=100000
//日常感谢我的大巨轮
//a[i][1]!=-1 return 判断条件很好
//a[i][0]存最小数 a[i][1]存最大数 a[i][2]存有几个数
//如果a[i][1]-a[i][0]+1==a[i][2] 就代表连续#include <bits/stdc++.h>
using namespace std;
const int maxxx=100005;
vector <int> vec[maxxx];
int a[maxxx][3];
int n;
void dfs(int i)
{if(a[i][1]!=-1) return;int minn=i,maxx=i,k=1;int l=vec[i].size();for(int j=0;j<l;j++){int x=vec[i][j];dfs(x);if(minn>a[x][0]) minn=a[x][0];if(maxx<a[x][1]) maxx=a[x][1];k=k+a[x][2];}a[i][0]=minn,a[i][1]=maxx,a[i][2]=k;
}
int main()
{scanf("%d",&n);for(int i=0;i<=n;i++){a[i][0]=1000000;a[i][1]=-1;}for(int i=1;i<n;i++){int a,b;scanf("%d%d",&a,&b);vec[a].push_back(b);}for(int i=1;i<=n;i++){dfs(i);}int sum=0;for(int i=1;i<=n;i++){if(a[i][1]-a[i][0]+1==a[i][2])sum++;}printf("%d\n",sum);return 0;
}
搜索+思维 珂朵莉的值域连续段相关推荐
- 牛客练习赛9 B - 珂朵莉的值域连续段
题目描述 珂朵莉给你一个有根树,求有多少个子树满足其内部节点编号在值域上连续 一些数在值域上连续的意思即其在值域上构成一个连续的区间 输入描述: 第一行有一个整数n,表示树的节点数.接下来n–1行,每 ...
- 珂朵莉的值域连续段——DFS
题目描述: 珂朵莉给你一个有根树,求有多少个子树满足其内部节点编号在值域上连续 一些数在值域上连续的意思即其在值域上构成一个连续的区间 输入描述: 第一行有一个整数n,表示树的节点数. 接下来n–1行 ...
- 牛客练习赛9。 B 柯朵莉的值域连续端
时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 131072K,其他语言262144K 64bit IO Format: %lld 题目描述 珂朵莉给你一个有根树,求有多少个子树满足其 ...
- CF896C Willem, Chtholly and Seniorious【珂朵莉树】
>Link luogu CF896C >Description >解题思路 珂朵莉树,一种奇妙的数据结构使得暴力跑的飞快 这种数据结构的重要就是"推平",题目中的 ...
- 数据结构 【树状数组】【线段树】【珂朵莉树】
一.区间合并 1.AcWing245你能回答这些问题吗 分析: 线段树.维护四个变量,即可实现区间合并. mx 区间最大连续子段和 mx_l 以区间左端点为左界的最大连续字段和 mx_r 以区间左端点 ...
- [转]我的数据结构不可能这么可爱!——珂朵莉树(ODT)详解
参考资料: Chtholly Tree (珂朵莉树) (应某毒瘤要求,删除链接,需要者自行去Bilibili搜索) 毒瘤数据结构之珂朵莉树 在全是珂学家的珂谷,你却不知道珂朵莉树?来跟诗乃一起学习珂朵 ...
- 洛谷P3987 我永远喜欢珂朵莉~ 树状数组+vector(暴力)
题目链接:我永远喜欢珂朵莉- 在太阳西斜的这个世界里,置身天上之森.等这场战争结束之后,不归之人与望眼欲穿的众人, 人人本着正义之名,长存不灭的过去.逐渐消逝的未来.我回来了,纵使日薄西山,即便看不到 ...
- 一种黑科技:珂朵莉树
首先要明白的是:珂朵莉树(ODT)是一种用来骗分的暴力数据结构. 珂朵莉树的思想是利用集合set,把相同且连续的元素合并为一个个区间,从而进行区间修改:因此,珂朵莉树是区间的集合,这点可以通过定义结构 ...
- 珂朵莉树/ODT 学习笔记
珂朵莉树/ODT 学习笔记 起源自 CF896C.珂朵莉yyds! 核心思想 把值相同的区间合并成一个结点保存在 set 里面. 用处 骗分.只要是有区间赋值操作的数据结构题都可以用来骗分.在数据随机 ...
最新文章
- 面向Mobile device的CNN模型手工设计与NAS分析总结,MobileNet V1,V2,V3,Efficient,MNasNet以及Efficient network design
- c# winform 用子窗体刷新父窗体,子窗体改变父窗体控件的值
- hls二次加密 m3u8_HLS实战之Wireshark抓包分析
- 1077: 字符串加密
- python在线编译-在线编译python
- python编程题3
- Hibernate--使用xml配置映射关系
- 网页html语言怎么看,怎样查看网页的css代码?
- js修改id的值_如何修改pytesthtml源码来优化接口自动化测试报告
- 吸收塔如何提高吸收率_想让肌肉生长得更好,蛋白质的补充很重要,如何选择你知道吗?...
- 【学术】施一公分享自身经验:如何提高自己的专业英文文献阅读能力
- 利用cookie 解决多站点共享session的解决方案
- NRF24L01+模块:一对一双向通信,成功!
- 夜的钢琴曲五—吉他指弹
- 【转】js 判断今天日期是否超过指定日期
- JS中如何删除li节点
- NNS域名系统之域名竞拍
- tf.losses.mean_squared_error函数浅析
- 各大IT公司校园招聘程序猿笔试 面试题集锦
- 如何修复Word文档XML提示