解决这个问题的关键在于如何判断是否有可能删除编号为x的节点。
我们可以观察到,如果编号为x的节点是叶子节点,那么可以直接删除它并获胜。如果编号为x的节点不是叶子节点,那么需要通过一系列的操作,使得编号为x的节点变成叶子节点,然后删除它。
具体实现时,我们可以首先构建出给定的树,然后检查编号为x的节点的度(即它连接的边的数量)。如果它的度小于等于1,那么它是叶子节点,先手管理员可以直接删除它并获胜。如果它的度大于1,那么我们需要检查树的节点数量是否为偶数。如果是偶数,那么有可能通过一系列的操作,使得编号为x的节点变成叶子节点,然后删除它。如果是奇数,则无法获胜。
简单证明
在一个由 n 台服务器和 n−1 条光纤组成的无环网络中,每台服务器直接连接若干其他服务器。若某台服务器至多与一台服务器相连(即度数为 0 或 1),则称它为“末端服务器”。两名管理员轮流进行网络精简:每一回合,当前操作者必须选择一台末端服务器,将其以及它所连的光纤从网络中移除。网络中被预先标记了一台关键服务器 x,移除这台服务器的管理员立即获胜。现在给出网络的初始连接方式以及关键服务器编号 x,请你判断先手管理员是否有必胜策略。
节点总数 n 满足 1≤n≤104,测试用例数 t 满足 1≤t≤30。保证输入的边构成一棵树,所有编号均为 1 到 n 之间的整数。
输入格式: 第一行包含一个整数 t,表示测试用例的数量。接下来依次描述每个测试用例。每个测试用例的第一行包含两个整数 n 和 x,分别表示服务器总数和关键服务器的编号。接下来的 n−1 行,每行包含两个整数 u 和 v,表示存在一条连接服务器 u 和服务器 v 的光纤。
输出格式:
对于每个测试用例,输出一行字符串。若先手管理员存在必胜策略,输出 win;否则输出 lose。
By signing up a CodeFun2000 universal account, you can submit code and join discussions in all online judging services provided by us.