T1 首先对于第一回合移动至多K步后,变成先打锁再移动,所以可以无视锁……BFS到一个点后,看一看到四个边界的距离,取个min,再乱搞即可。注意特判一开始就在目标位置。
另:一开始用dfs愉快GG,且BFS时注意打标记的顺序!!!
T2 首先考虑Z=0的情况,显然按照A-B排序,先全部取B,再去A-B的前X大即可。Z!=0时,同样按照A-B排序,显然在最后的方案中,存在一个分界点k,使得1~k只选A、C,k+1~N只选B、C。所以枚举这个边界,从左往右扫一次,用一个优先队列维护A-C的前X大,同理从右往左扫一次即可……
T3 对于每只鸡X,从后往前扫,对于一对鸡【i,j】,如果有一只存在于X的替死鸡集合里,就把另一只作为这只鸡的替死鸡,加入到替死鸡集合里。如果出现矛盾,那么鸡X就必须GG了……
最后枚举两只鸡的替死鸡集合是否存在交,没有则可以同时活下来。
T1:http://paste.ubuntu.com/25424668/
T2:http://paste.ubuntu.com/25424669/
T3:http://paste.ubuntu.com/25424670/