我用的这个飞屋代码求两点间距离:
(f[i]表示i的父亲,c[i]表示i的层数)
int fw_ju(int t1, int t2)
{
int rt = 0;
while(c[t1] > c[t2])
{
t1 = f[t1], rt++;
}
while(c[t2] > c[t1])
{
t2 = f[t2], rt++;
}
while(t2 != t1)
{
t1 = f[t1], rt++;
t2 = f[t2], rt++;
}return rt;
}
void dfs(int d)
{
int i;
for (i = h[d]; i; i = e[i].lst)
{
if (ved[e[i].to]) continue;
c[e[i].to] = c[d]+1;
f[e[i].to] = d;
ved[e[i].to] = 1;
dfs(e[i].to);
}
}
不出意外,它会T得很惨吧?(尤其是这道题时限还只有100ms)
然后:记录
《只用了44ms》