解题:CF1009 Dominant Indices
长链剖分模板题
只能按深度统计,同时比DSU on tree难理解一些,但是复杂度少个log
对每个点抓出向下延伸最长的儿子叫做长儿子。在合并时用指针继承信息,对于长儿子O(1)继承,其他儿子暴力
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int N=;
int len[N],imp[N],ans[N];
int p[N],noww[*N],goal[*N];
int mem[N],*pts[N],*fpt=mem+;
int n,t1,t2,cnt;
void Link(int f,int t)
{
noww[++cnt]=p[f];
goal[cnt]=t,p[f]=cnt;
}
void DFS(int nde,int fth,int dth)
{
for(int i=p[nde];i;i=noww[i])
if(goal[i]!=fth)
{
DFS(goal[i],nde,dth+);
if(len[goal[i]]>len[imp[nde]])
imp[nde]=goal[i];
}
len[nde]=len[imp[nde]]+;
}
void Getans(int nde,int fth)
{
pts[nde][]=;
if(imp[nde])
{
pts[imp[nde]]=pts[nde]+;
Getans(imp[nde],nde),ans[nde]=ans[imp[nde]]+;
}
for(int i=p[nde];i;i=noww[i])
if(goal[i]!=fth&&goal[i]!=imp[nde])
{
pts[goal[i]]=fpt,fpt+=len[goal[i]],Getans(goal[i],nde);
for(int j=;j<=len[goal[i]];j++)
{
pts[nde][j]+=pts[goal[i]][j-];
int b1=(j<=ans[nde]&&pts[nde][j]>=pts[nde][ans[nde]]);
int b2=(j>ans[nde]&&pts[nde][j]>pts[nde][ans[nde]]);
if(b1||b2) ans[nde]=j;
}
}
if(pts[nde][ans[nde]]==) ans[nde]=;
}
int main()
{
scanf("%d",&n);
for(int i=;i<n;i++)
{
scanf("%d%d",&t1,&t2);
Link(t1,t2),Link(t2,t1);
}
DFS(,,),pts[]=fpt,fpt+=len[];
Getans(,);
for(int i=;i<=n;i++)
printf("%d\n",ans[i]);
return ;
}
解题:CF1009 Dominant Indices的更多相关文章
- CF1009F Dominant Indices 解题报告
CF1009F Dominant Indices 题意简述 给出一颗以\(1\)为跟的有根树,定义\(d_{i,j}\)为以\(i\)为根节点的子树中到\(i\)的距离恰好为\(j\)的点的个数,对每 ...
- 【CF1009F】Dominant Indices(长链剖分)
[CF1009F]Dominant Indices(长链剖分) 题面 洛谷 CF 翻译: 给定一棵\(n\)个点,以\(1\)号点为根的有根树. 对于每个点,回答在它子树中, 假设距离它为\(d\)的 ...
- Codeforces 1009 F - Dominant Indices
F - Dominant Indices 思路:树上启发式合并 先跑轻子树,然后清除轻子树的信息 最后跑重子树,不清除信息 然后再跑一遍轻子树,重新加回轻子树的信息 由于一个节点到根节点最多有logn ...
- Codeforces 1009 F. Dominant Indices(长链剖分/树上启发式合并)
F. Dominant Indices 题意: 给一颗无向树,根为1.对于每个节点,求其子树中,哪个距离下的节点数量最多.数量相同时,取较小的那个距离. 题目: 这类题一般的做法是树上的启发式合并,复 ...
- [CF1009F] Dominant Indices (+dsu on tree详解)
这道题用到了dsu(Disjoint Set Union) on tree,树上启发式合并. 先看了CF的官方英文题解,又看了看zwz大佬的题解,差不多理解了dsu on tree的算法. 但是时间复 ...
- CF1009F Dominant Indices(树上DSU/长链剖分)
题目大意: 就是给你一棵以1为根的树,询问每一个节点的子树内节点数最多的深度(相对于这个子树根而言)若有多解,输出最小的. 解题思路: 这道题用树链剖分,两种思路: 1.树上DSU 首先想一下最暴力的 ...
- CF1009F Dominant Indices(启发式合并)
You are given a rooted undirected tree consisting of nn vertices. Vertex 11 is the root. Let's denot ...
- Codeforces1009F Dominant Indices
dsu on tree 题目链接 点我跳转 题目大意 给定一棵以 \(1\) 为根,\(n\) 个节点的树.设\(d(u,x)\) 为 \(u\) 子树中到 \(u\) 距离为 \(x\) 的节点数. ...
- Codeforces ECR47F Dominant Indices(线段树合并)
一个比较显然的做法:对每棵子树用线段树维护其中的深度,线段树合并即可. 本来想用这个题学一下dsu on tree,结果还是弃疗了. #include<iostream> #include ...
随机推荐
- Netty源码分析第7章(编码器和写数据)---->第4节: 刷新buffer队列
Netty源码分析第七章: 编码器和写数据 第四节: 刷新buffer队列 上一小节学习了writeAndFlush的write方法, 这一小节我们剖析flush方法 通过前面的学习我们知道, flu ...
- Netty源码分析第8章(高性能工具类FastThreadLocal和Recycler)---->第6节: 异线程回收对象
Netty源码分析第八章: 高性能工具类FastThreadLocal和Recycler 第六节: 异线程回收对象 异线程回收对象, 就是创建对象和回收对象不在同一条线程的情况下, 对象回收的逻辑 我 ...
- Kubernetes探索学习003--关于Kubernetes的Pod
关于Pod 关于Pod我们要慢慢去体会去接受它去使用它,尤其是运维人员这块需要从逻辑上形成认识,首先理解Pod是Kubernetes项目的原子调度单位.为什么是Pod而不是单个DockerContai ...
- 【Alpha版本发布】爬虫队长正在待命!
一.基础功能简介 本团队的爬虫能够从网上搜索相关内容, 并归类,把所爬到的网页或各种类型的文档下载到本地上. 上届团队Beta版本爬虫的主要功能如下: a)可爬取网页,问答页并进行问答文件分类. b) ...
- 2017-2018-2 1723 『Java程序设计』课程 结对编程练习_四则运算
一.结对对象 姓名:侯泽洋 学号:20172308 担任角色:驾驶员(侯泽洋) 伙伴第一周博客地址 二.本周内容 1.程序需求 (1).自动生成题目 可独立使用(能实现自己编写测试类单独生成题目的功能 ...
- Mutual and feedback(互评与反馈)
互评与反馈: 注:我在收集各小组对我小组的评价了,发现有几个没有收集到,不知道是我看不到还是贵小组不小心遗漏了对我小组的评价,如果看到,请给我留意,谢谢! 组名 对我 ...
- 程序开发入门工具之CodeBlocks
程序开发基础工具之CodeBlocks 作为程序开发工作者,我们会接触很多的程序开发软件:但实用以及容易掌握的程序开发软件对于初学者的学习能力是有一定的加成的.今天我就作为一个程序开发者给大家推荐一个 ...
- HBase 架构与工作原理4 - 压缩、分裂与故障恢复
本文系转载,如有侵权,请联系我:likui0913@gmail.com Compacation HBase 在读写的过程中,难免会产生无效的数据以及过小的文件,比如:MemStore 在未达到指定大小 ...
- PHP中的PEAR是什么?
PEAR也就是为PHP扩展与应用库(PHP Extension and Application Repository),它是一个PHP扩展及应用的一个代码仓库. 补充:php中扩展pecl与pear ...
- mysql实现消息队列
mysql之消息队列 消息队列:在消息的传输过程中保存消息的容器. 消息队列管理器在将消息从它的源中继到它的目标时充当中间人.队列的主要目的是提供路由并保证消息的传递:如果发送消息时接收者不可用, ...