题目:http://acm.hdu.edu.cn/showproblem.php?pid=4822
并不会做这个题,题解说是LCA(最近公共祖先),并不懂,说一下我自己的思路吧,虽然没能实现出来。
题意:告诉一张连通图,没有环,每条边长度为1,告诉三个点A,B,C,如果其中一个点A到另一个点E的距离小于另外两个点到E的距离,则A可以占据E。求A,B,C能够占据的城市的数目。
分析:因为会有10^5个提问,因此得在O(1) ~ 小于10^3的循环的复杂度内回答出它的提问。所以不可能暴力。
思路:我想求出3个点的两两之间的中点或者中间的边,然后断开,然后求出A,B,C的连通分量个数。读入的时候已经把它的子结点全部压了进去,断开的时候减掉断开的那个点或者那条边带的子结点。
选中的三个点是1,2,7,原本1的子结点是2,3,4,现在只有3,4,4.size = 1,3.size = 0,所以sum[1] = 3.size + 4.size = 2 ,还得加上本身所以是3。
不足:删掉之后还得全部遍历一遍才能得到全部点的子结点数目(随着点删掉,子结点数目也会变),时间复杂度还是很大。