【HDU】5299Circles Game -扫描线+树上删边博弈

传送门:hdu5299


题解

扫描线处理圆之间的关系后构造森林,满足每个点对应的圆严格包含其子树中的点对应的圆。

将森林的每个根连向虚根:问题转变为每次删除一条边及对应的子树,直到只剩下虚根,判断最优策略下先手是否必胜。

考虑一条链的 S G SG SG值即为边数,若树的形态是从根连出去几条链,那么这颗树的 S G SG SG值为所有连出去的链的边数的异或和。
将每个点标为以它为根的子树的 S G SG SG值。因为链的 S G SG SG值等于边数,所以可以将 S G SG SG值为 x x x的子树看做一条有 x x x条边的链,于是可以向上算贡献了:

设叶子结点 S G SG SG值为 0 0 0
非叶结点 S G SG SG值为所有儿子结点 S G SG SG + 1 +1 +1的异或和(链长+1)。

你可能感兴趣的:(set,Nim,sg函数)