摘要: 在线LCA如求A,B两点的LCA,先计算出各个结点的深度d[],然后,通过递推公式求出各个结点的2次方倍的祖先p[],假设d[A] > d[B],则找到d[p[A][i]] == d[B]也就是A的某一祖先与B深度相同,然后,u = p[A][i],通过p[u][i] 与p[B][i]比较找出LCA(巧妙的利用二进制).(p[a][b] 表示与a的距离为2^b的祖先,则p[a][0]表示为a的父亲。如 a->b->c->d->e,a为根, 则p[e][2] 为a)递推公式:p[a][b] = p[p[a][b - 1]][b - 1]/* 2^17=131072; 阅读全文
posted @ 2013-08-21 16:39 z.arbitrary 阅读(532) 评论(0) 推荐(0) 编辑
摘要: 今天又重新复习了下并查集,发现食物链挺好的。这次用的是枚举他们之间的关系,我觉得比赛时我也应该会这么写,而不是公式判断。题意:动物王国中有三类动物A,B,C,这三类动物的食物链构成了有趣的环形。A吃B, B吃C,C吃A。现有N个动物,以1-N编号。每个动物都是A,B,C中的一种,但是我们并不知道它到底是哪一种。有人用两种说法对这N个动物所构成的食物链关系进行描述:第一种说法是"1 X Y",表示X和Y是同类。第二种说法是"2 X Y",表示X吃Y。此人对N个动物,用上述两种说法,一句接一句地说出K句话,这K句话有的是真的,有的是假的。当一句话满足下列三条 阅读全文
posted @ 2013-08-21 14:45 z.arbitrary 阅读(258) 评论(0) 推荐(0) 编辑