首页 > 其他分享 >2022 ICPC网络赛(二) F Infinity Tree(规律 LCA)

2022 ICPC网络赛(二) F Infinity Tree(规律 LCA)

时间:2022-10-08 10:14:32浏览次数:48  
标签:fax fay Infinity 个点 Tree ICPC while 编号 节点

2022 ICPC网络赛(二) F Infinity Tree

题意:

​ 现在给出一个树,对于这棵树,一开始有一个根节点1,每秒之后,每个节点会长出k个节点。节点的最大编号为\(1e18\)。现在给出任意两个节点编号a, b,还有每秒生成的节点个数k。请问节点a,b的最近公共祖先的编号是多少。

思路:

​ 题目已经指出了LCA。由于层数最多是\(log2(1e18)\)大概不到100层,所以我们可以直接采取最朴素的LCA思想,也就是取深度大的点向上跳。从1开始不断*(k+1)就可以得到x和y的父节点,那我们对比x和y的编号大小,谁编号大谁就深,向上跳一个,然后再暴力更新其父亲位置,直到跳到x等于y为止。那么我们还需要通过规律来推出,如何从一个节点的编号得到其父亲节点的编号。

​ 我们可以设k为2,手推可以发现,第一秒有1个点,第二秒有3个点,第三秒有9个点。那么第四秒将会有27个点,且在第四秒出生的点编号为[10 - 27],通过题意可以知道,10 11是由点1生成的,12 13是由点2生成的,以此类推。我们可以重新编号一下,10是第四秒的出生的1号点,11是第四秒出生的二号点,可以知道在第四秒出生的前k个点的父亲都是1,在第四秒出生的[k + 1 - 2 * k]个点的父亲都是2。得出规律,将(当前点编号 - 上一秒出生的点的总数) / k(上取整)即可O1得到父亲节点的编号。

实现:

​ 可能会乘爆,那就开一个__int128来存一下就好。

ll ceil(ll x, ll y)	{return (x + y - 1) / y;} //上取整

void solve()
{
	ll k, x, y;
	cin >> k >> x >> y;
	__int128 fax = 1, fay = 1;
	while(fax < x)
		fax *= (k + 1);
	fax /= (k + 1);
	while(fay < y)
		fay *= (k + 1);
	fay /= (k + 1);
	
	while(x != y)
	{
		if(x > y)
		{
			x = ceil(x - fax, k); 
			
			fax = 1; //重新找父节点
			while(fax < x)
				fax *= (k + 1);
			fax /= (k + 1);
		}
		else
		{
			y = ceil(y - fay, k);

			fay = 1; //重新找父节点
			while(fay < y)
				fay *= (k + 1);
			fay /= (k + 1);
		}
	}
	cout << x << '\n';
}

标签:fax,fay,Infinity,个点,Tree,ICPC,while,编号,节点
From: https://www.cnblogs.com/DM11/p/16768093.html

相关文章

  • leetcode 106. Construct Binary Tree from Inorder and Postorder Traversal 从中序
    一、题目大意给定两个整数数组inorder和postorder,其中inorder是二叉树的中序遍历,postorder是同一棵树的后序遍历,请你构造并返回这颗二叉树。示例1:输入:ino......
  • 【CMU15-445 Project #2】B+Tree
    Checkpoint#1task#1二分查找[K0,V0(pre_page)][K1,V1]....[Kn,Vn][next_page]在[K1,V1]...[Kn,Vn]中找到第一个大于等于key值的编号i使得,key<=......
  • The 2021 ICPC Asia Shenyang Regional Contest
    比赛链接:https://codeforces.com/gym/103427B.BitwiseExclusive-ORSequence题意:给定\(m\)个限制,要求构造一个全是非负整数的序列\(a\),每个限制告诉\(u,v,w\),......
  • Xgboost - A scalable tree boosting system Chiang
    XGBoost(eXtremeGradientBoosting)其核心是对决策树(DecisionTree)的增强(Boosting)方法,属于集成学习(EnsembleLearning)。集成算法思想在决策树中,我们知道一个样本往左边分或者......
  • ICPC预选赛1
    ABC#include<iostream>#include<cstdio>#include<cmath>#include<algorithm>#include<cstring>usingnamespacestd;constintN=2e6+10;intread(){ i......
  • leetcode 889. Construct Binary Tree from Preorder and Postorder Traversal 根据前
    一、题目大意给定两个整数数组,preorder和postorder,其中preorder是一个具有无重复值的二叉树的前序遍历,postorder是同一棵树的后序遍历,重构并返回二叉树。如果存......
  • ICPC网络赛2A&&费马小定理
    题目链接:https://pintia.cn/problem-sets/1574060137151397888/exam/problems/1574060247893606400费马小定理:如果p是一个质数,而整数a不是p的倍数(gcd(p,a)=1),则有a^(p-1......
  • Educational Codeforces Round 32 G Xor tree Boruvka算法
    求一个n个点的完全图每条边的权值为两点之间的异或值求最小生成树。在完全图上做最小生成树一般都是Boruvka算法即每次每个点都找一个离自己最近的点合并这样最多合并lo......
  • 「CF1710D」Recover the Tree
    题目给定一个\(n\timesn\)的01矩阵(的上三角部分)\(A_{n\timesn}\)。构造一棵有\(n\)个结点的树,满足:对于任意的\(1\lel\ler\len\),编号在\([l,r]\)内的结点......
  • 题解【CF1149C Tree Generator】
    CF1149CTreeGenerator™不一定更好的阅读体验。牛逼题&ZROIDay3数据结构选讲。来一波详细的题解。当时和\(\texttt{ys}\),\(\texttt{hy}\)还有小猴子讨论了半......