首页 > 其他分享 >AT_agc009_d [AGC009D] Uninity 题解

AT_agc009_d [AGC009D] Uninity 题解

时间:2024-12-19 14:31:05浏览次数:3  
标签:log AGC009D int 题解 agc009 fa Uninity define

一道妙妙题。

一句话题意:求点分树的高度最小值。

给所有点填上一个数表示它子树 \(k\),考虑一种填法什么时候满足条件,发现当且仅当任意两对值相同的点之间的路径上存在一个权值更大的点。

考虑随便找一个点作为根从叶子节点开始贪心填值,每次选择能填的最小值,发现这样填最终的值的最大值一定是最小的。

在每个点 \(x\) 上对每个 \(\le \log n\) 的值维护一下子树中是否存在一个这个值的点满足到 \(x\) 的路径上没有一个值更大的点,即可求出 \(x\) 能填的最小的值,时间复杂度 \(\mathcal O(n\log n)\)。

参考代码:

#include<bits/stdc++.h>
#define mxn 200003
#define pb push_back
#define rep(i,a,b) for(int i=(a);i<=(b);++i)
#define rept(i,a,b) for(int i=(a);i<(b);++i)
using namespace std;
int n,ans,f[mxn],s[mxn];
vector<int>g[mxn];
void dfs(int x,int fa){
	int a=0;
	for(int i:g[x])if(i!=fa){
		dfs(i,x);
		rept(j,0,18)if((a>>j)&1&&(s[i]>>j)&1)f[x]=max(f[x],j+1);
		a|=s[i];
	}
	while((a>>f[x])&1)f[x]++;
	ans=max(ans,f[x]);
	s[x]=((a>>f[x])<<f[x])|(1<<f[x]);
}
signed main(){
	scanf("%d",&n);
	for(int i=1,x,y;i<n;++i){
		scanf("%d%d",&x,&y);
		g[x].pb(y),g[y].pb(x);
	}
	dfs(1,0);
	cout<<ans;
	return 0;
}

标签:log,AGC009D,int,题解,agc009,fa,Uninity,define
From: https://www.cnblogs.com/zifanoi/p/18617202

相关文章

  • 题解:最优硬币组合问题
    更多算法题的题解见:算法刷题题解汇总(持续更新中)一、问题背景小C有多种不同面值的硬币,每种硬币的数量是无限的。他希望知道,如何使用最少数量的硬币,凑出给定的总金额N。小C对硬币的组合方式很感兴趣,但他更希望在满足总金额的同时,使用的硬币数量尽可能少。例如:小C有三种硬币......
  • 题解:P11409 西湖有雅座
    题解:P11409西湖有雅座题目转送带简洁思路由于数据比较小,可以先预处理出任何两个零件是否能出现在同一栋大楼上。即枚举所有的两个零件,根据题意去模拟判断条件是否满足:\[\foralli,j\inU,f\left(i,j\right)\ge\lceil\frac{\min\left(S\left(i\right),S\left(j\righ......
  • 把半年前完全没思路的题解了的感觉真好
    虽然处理了很多次索引思路,不过最后还是过了。第一眼就有解题思路,这种感觉真不错,要的就是这种打怪升级的正反馈。附上解题代码`#@lcapp=leetcode.cnid=2266lang=python3[2266]统计打字方案数@lccode=startfromcollectionsimportCounterfromfunctoolsimportcac......
  • CF1100F题解
    \(CF1100F\),\(Ivan\)\(and\)\(Burgers\)题意:静态序列查询一个区间中选取任意个数的最大异或和,\((n\le10^6)\)\(sol\):考虑离线做,把询问按\(r\)从小到大排序,每次\(r\)右移时把新框进来的数加入线性基中,同时记录线性基每一位在序列中的位置,贪心的考虑显然位置越靠后越优,查......
  • 牛客小白月赛106 题解 更新至 F 题
    Preface期末周闲的没事写一场小白月赛我会在代码一些有必要的地方加上注释,签到题可能一般就不会写了.以下是代码火车头:#include<iostream>#include<algorithm>#include<cstring>#include<cmath>#include<vector>#include<set>#include<queue>#include<map>......
  • tauri2文件资源访问和存储常见问题解决
    上tauri2的github上搜一下,发现问题还是挺多的,如果你是从tauri1迁移过来的话,估计要走的坑更多,因为tauri2的配置很多已经和tauri1不一样了,如果你还是习惯用tauri1的配置思维来搞tauri2的话,肯定会让你很难受。附上tauri2常用的几个链接:官方javascript的api文档:window|Tauri ......
  • [HDU5603] the soldier of love 题解
    考虑到正向求解困难,于是正难则反。那么实际上对于\(a_i\)和\(a_{i+1}\)来说,它们给答案的贡献就是满足\(l_j>a_i,r_j<a_{i+1}\)的区间数量。那么就是经典转化了。直接转换为二维数点问题即可。时间复杂度\(O(tn\logV)\),离散化可以将\(\logV\)转化为\(\logn\)。#inc......
  • CF1889D Game of Stacks 题解
    很有趣的题目.思路我们考虑如果每一个栈里只有一个数怎么办。这个时候,我们会形成一个基环树森林。我们的操作相当于每走一步就删掉来时的路。那么每个点最终会停在离它最近的环上的点。我们可以发现一个性质,一个环是不会影响结果的,因为它总能走回来。所以我们可以不断的删......
  • P7531 [USACO21OPEN] Routing Schemes P 题解
    best定理居然还有运用范围。思路考虑如何来判断是否有解。由于每一条边都需要用到。但是它是使用很多条路径进行覆盖。我们考虑一个很巧妙的转化。建立一个超级源点,源点向每一条路径的开头连一条边。每一条路径的结尾向源点连一条边,这样一条路径就变成了一个回路。把所有......
  • AT_abc129_f [ABC129F] Takahashi's Basics in Education and Learning 题解
    题目传送门前置知识矩阵加速递推解法设\(f_{i}\)表示将\(s_{1}\sims_{i}\)拼起来后的值,状态转移方程形如\(f_{i}=10^{k}f_{i-1}+s_{i}\),其中\(k=\left\lfloor\log_{10}s_{i}\right\rfloor+1\)。又因为保证等差数列中的元素\(\le10^{18}\),对于每个\(k\in[1,......