CF1009F Dominant Indices 解题报告
CF1009F Dominant Indices
题意简述
给出一颗以\(1\)为跟的有根树,定义\(d_{i,j}\)为以\(i\)为根节点的子树中到\(i\)的距离恰好为\(j\)的点的个数,对每个点求出一个最小的\(j\)使得\(d_{i,j}\)最大
这个长链剖分的小trick感觉和树上分组背包的复杂度有点神似啊,据说和dsu on tree也有点像?
暴力的\(dp_{i,j}\)代表与\(i\)点相距为\(j\)的点的个数,复杂度\(O(n^2)\)
对每个点按重量维护重儿子,然后每个点直接继承重儿子的信息,暴力合并轻儿子的信息,这样每个点的信息只会在重链链头的父亲被合并一次,复杂度\(O(n)\)
关于继承重儿子,我抄了个很厉害的指针写法。注意要格外在意是不是访问了不该访问的空间。
Code:
#include <cstdio>
const int N=1e6+10;
int max(int x,int y){return x>y?x:y;}
int head[N],to[N<<1],Next[N<<1],cnt;
void add(int u,int v)
{
    to[++cnt]=v,Next[cnt]=head[u],head[u]=cnt;
}
int dis[N],ws[N],ans[N],n;
void dfsinit(int now,int fa)
{
    dis[now]=1;
    for(int v,i=head[now];i;i=Next[i])
        if((v=to[i])!=fa)
        {
            dfsinit(v,now);
            if(dis[ws[now]]<dis[v]) ws[now]=v;
            dis[now]=max(dis[now],dis[v]+1);
        }
}
int sav[N],*it=sav,*dp[N];
void dfs(int now,int fa)
{
    dp[now][0]=1;
    if(ws[now]) dp[ws[now]]=dp[now]+1,dfs(ws[now],now),ans[now]=ans[ws[now]]+1;
    for(int v,i=head[now];i;i=Next[i])
        if((v=to[i])!=fa&&v!=ws[now])
        {
            dp[v]=it,it+=dis[v];
            dfs(v,now);
            for(int j=1;j<=dis[v];j++)
            {
                dp[now][j]+=dp[v][j-1];
                if((j>ans[now]&&dp[now][j]>dp[now][ans[now]])||(j<ans[now]&&dp[now][j]>=dp[now][ans[now]]))
                    ans[now]=j;
            }
        }
    if(dp[now][ans[now]]==1) ans[now]=0;
}
int main()
{
    scanf("%d",&n);
    for(int u,v,i=1;i<n;i++) scanf("%d%d",&u,&v),add(u,v),add(v,u);
    dfsinit(1,0);
    dp[1]=it,it+=dis[1];
    dfs(1,0);
    for(int i=1;i<=n;i++) printf("%d\n",ans[i]);
    return 0;
}
2018.12.13
CF1009F Dominant Indices 解题报告的更多相关文章
- [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 ... 
- CF1009F Dominant Indices
		传送门 还是放个链接让泥萌去学一下把 orzYYB 题目中要求的\(f_{x,j}\),转移是\(f_{x,j}=\sum_{y=son_x} f_{y,j-1}\),所以这个东西可以用长链剖分优化, ... 
- CF1009F Dominant Indices——长链剖分优化DP
		原题链接 \(EDU\)出一道长链剖分优化\(dp\)裸题? 简化版题意 问你每个点的子树中与它距离为多少的点的数量最多,如果有多解,最小化距离 思路 方法1. 用\(dsu\ on\ tree\)做 ... 
- CF1009F Dominant Indices   长链剖分
		题目传送门 https://codeforces.com/contest/1009/problem/F 题解 长链剖分的板子吧. 令 \(dp[x][i]\) 表示 \(x\) 的子树中的深度为 \( ... 
- 【CF1009F】Dominant Indices(长链剖分)
		[CF1009F]Dominant Indices(长链剖分) 题面 洛谷 CF 翻译: 给定一棵\(n\)个点,以\(1\)号点为根的有根树. 对于每个点,回答在它子树中, 假设距离它为\(d\)的 ... 
- LeetCode 1 Two Sum 解题报告
		LeetCode 1 Two Sum 解题报告 偶然间听见leetcode这个平台,这里面题量也不是很多200多题,打算平时有空在研究生期间就刷完,跟跟多的练习算法的人进行交流思想,一定的ACM算法积 ... 
- LeetCode - 167. Two Sum II - Input array is sorted - O(n) - ( C++ ) - 解题报告
		1.题目大意 Given an array of integers that is already sorted in ascending order, find two numbers such t ... 
随机推荐
- 引用“kernel32”读写ini配置文件
			引用"kernel32"读写ini配置文件 unity ini kernel32 配置文件 引用"kernel32"读写ini配置文件 OverView ke ... 
- Linux命令对应的英文及整体学习法
			linux命令 注意一下内容收集与互联网,如果觉得有版权问题,请联系. 用Linux命令的时候,如果熟悉对应英文的含义,更有助于理解相应的命令.man: Manual 意思是手册,可以用这个命令查询其 ... 
- 算法工程师进化-SQL
			1 引言 SQL操作往往是程序员必备的技能,对于算法工程师而言,熟练掌握SQL操作则更为重要.本文以<SQL语句执行顺序>作为学习资料,总结SQL的理论部分. 2 SQL查询语句的执行顺序 ... 
- 戴尔win10重新安装win7系统
			戴尔v5468电脑win10重装回win7系统 首先是公司需要用到ie8来执行公司的项目维护,都是很早之前的项目了,因为是对接政府相关的业务,不怎么有把握对项目进行稳定更新,所以我就为这个ie8操碎了 ... 
- Python中的装饰器的初步理解
			什么是装饰器? 装饰器的本质是一个函数,其作用是用来装饰其他的函数,给其他函数附加行的功能. 原则: 1.不能修改被装饰函数的源码. 2.不能改变被装饰函数的调用方式. 那么什么是函数? 简单的来说: ... 
- spring boot的maven项目报404错误
			$.ajax({ async: false, type: "POST", url:'searchFileSource', contentType : "applicati ... 
- TeamWork#3,Week5,Scrum Meeting 11.15
			经过最近一段时间的努力,我们调整了爬虫结构,并在继续进行爬虫开发,马上可以进行新爬虫与服务器连接的测试. 成员 已完成 待完成 彭林江 基本完成爬虫结构调整 新爬虫与服务器连接 郝倩 基本完成爬虫结构 ... 
- 《Spring1之第五次站立会议》
			<第五次站立会议> 昨天:试着做了一下主框架里的在线人数的显示代码: 今天:向小伙伴们请教了我代码的错误的解决方法以及对TCP/IP协议进行了相关的了解. 遇到的问题:虽然基本原理不难理解 ... 
- java微信开发之接口连接
			个人学习注册订阅号就行,把资料尽可能完善,不然开发时权限不够,然后登陆,点击订阅号然后扫码就可以微信关注. 
- Alpha版本冲刺(九)
			目录 组员情况 组员1(组长):胡绪佩 组员2:胡青元 组员3:庄卉 组员4:家灿 组员5:凯琳 组员6:翟丹丹 组员7:何家伟 组员8:政演 组员9:黄鸿杰 组员10:刘一好 组员11:何宇恒 展示 ... 
