首页 > 其他 > 详细

NOIP 2016 天天爱跑步

时间:2018-10-29 22:30:42      阅读:181      评论:0      收藏:0      [点我收藏+]

我独立想只想出来了前80分的做法,不过貌似我的做法离正解比较远

技术分享图片

 

测试点1~2

直接看每个点有多少玩家且这个点时间为0即可

 

测试点3~4

看每个点有多少个起点

 

测试点5

暴力模拟过程即可

 

测试点6~8

每个玩家在起点的点记录下起点和终点

然后搜每一个点,算出如果要跑到这点应该在的起点,然后再根据这个起点和终点来看

经不经过当前这个点

 

测试点9~12

要满足被经过则deep[i] = w[i]

那么关键是路径由没有过当前点

那么对每一个终点,把这个终点到根的路径的每个点的权值加1即可(用树上差分)

这样找每个观察员的时候就知道他被多少路径覆盖了

 

测试点13~16

可以通过w的值算出可以观察到的路径的长度

那么根据长度进行排序

对于每一个观察员,算出路径的长度

然后可以二分出当前长度的区间。

但是这个时候起点必须在观察员的子树内

那么我们可以记录dfs序,排序的时候长度为第一关键字,dfs序为第二关键字

那么就可以两次二分求左端点和右端点,就可以求出出符合条件的路径有多少了。

这个做法很骚,想了很久。

 

这就是我能独立想出的极限了。

看了下题解发现我貌似偏离正解比较远……

 

NOIP 2016 天天爱跑步

原文:https://www.cnblogs.com/sugewud/p/9873798.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!