我独立想只想出来了前80分的做法,不过貌似我的做法离正解比较远
测试点1~2
直接看每个点有多少玩家且这个点时间为0即可
测试点3~4
看每个点有多少个起点
测试点5
暴力模拟过程即可
测试点6~8
每个玩家在起点的点记录下起点和终点
然后搜每一个点,算出如果要跑到这点应该在的起点,然后再根据这个起点和终点来看
经不经过当前这个点
测试点9~12
要满足被经过则deep[i] = w[i]
那么关键是路径由没有过当前点
那么对每一个终点,把这个终点到根的路径的每个点的权值加1即可(用树上差分)
这样找每个观察员的时候就知道他被多少路径覆盖了
测试点13~16
可以通过w的值算出可以观察到的路径的长度
那么根据长度进行排序
对于每一个观察员,算出路径的长度
然后可以二分出当前长度的区间。
但是这个时候起点必须在观察员的子树内
那么我们可以记录dfs序,排序的时候长度为第一关键字,dfs序为第二关键字
那么就可以两次二分求左端点和右端点,就可以求出出符合条件的路径有多少了。
这个做法很骚,想了很久。
这就是我能独立想出的极限了。
看了下题解发现我貌似偏离正解比较远……
原文:https://www.cnblogs.com/sugewud/p/9873798.html