半年多没碰OI,现在回归,找到了当时用倍增、树剖、RMQ、tarjan爆切无数次的LCA,结果......倍增挂了。
倍增代码:(数组代表什么应该显而易见吧)
int find_lca(int a,int b)
{
int mi=24;
while(1)
{
if(mi==-1) break;
int baba_a=baba[mi][a];
if(deep[baba_a]<deep[b])
{
mi--;continue;
}
a=baba_a;
mi--;
}
if(a==b) return a;
mi=24;
while(1)
{
if(mi==-1) break;
int baba_a=baba[mi][a];
int baba_b=baba[mi][b];
if(baba_a==baba_b)
{
mi--;continue;
}
a=baba_a;
b=baba_b;
mi--;
}
return baba[0][a];
}
顺带吐槽一下,我把倍增改成暴力求LCA(一步一步地往上爬),居然直接过了这题......
退坑太久,实力真就下降好多