D-LCA On N-ary Tree(思维)
在画树时找到一个有趣的数学规律,适用于已知子节点找父节点。
比如:
father=x;(这里初始化)
father=(father+n-2)/n;
当n==2时,循环次数<30,因为 2^30 >10^9。当n>2时肯定小于30,所以肯定不会超时。但是当n==1时,如果用这种方法也能算出来,但是会超时,有更好的方法是直接特判。
代码如下:
#include<cstdio>
using namespace std;
bool ok=0;
int main()
{
int t,n;
scanf("%d",&t);
int z,x,y;
for(int i=1;i<=t;i++){
scanf("%d%d%d",&z,&x,&y);
int fa=x,fb=y;
if(z==1){
if(fa>fb)printf("%d\n",fb);
else printf("%d\n",fa);
}
else{
while(1){
if(fa==fb){
if(fa==0){
printf("1\n");
}
else printf("%d\n",fa);
break;
}
else if(fa>fb){
fa=(fa+z-2)/z;
}
else if(fb>fa){
fb=(fb+z-2)/z;
}
}
}
}
}
京公网安备 11010502036488号