正题
题目是这样的:
Rose一共有n个礼物,他女朋友也有n个礼物。
这些礼物有两个权值,x表示的是该礼物在Rose眼里的重要度,y表示的是该礼物在其女朋友眼里的重要度。
当一个人收到自己眼里价值为的礼物时,会回赠在自己眼里在
的礼物。
当一个人收到自己眼里价值为0的礼物时,会觉得对方没有诚意,所以就会停止送礼物。
问Rose先送第i个礼物给其女朋友,最快什么时候会结束送礼物。(操作由你决定。
题解:
我们把Rose和其女朋友的礼物分成两堆点,那么我们可以对这两堆点进行连边。
边表示什么呢?
表示的是,当送i礼物的时候,另一方可以回赠j礼物。那么我们从i到j建一条权值为1的边。
特殊的,左边的y权为0的点和右边x权为0的点向ed连一条权值为1的边,表示结束。
因为是求多个点到一个点ed的最短路,所以我们把边反着建,求ed到多个点的最短路就是答案了。
好的,因为数据过水,已经是正解了。
考虑线段树优化建图,左边按x来排序,右边按y来排序,那么当从左边向右边连边的时候,连的一定是连续的一段点。
右边往左边也一样,那么这两个端点可以通过二分查找。
线段树优化一下建图就可以了。
最后,因为线段树里面的边是0边,其他的边都是1边,要跑最短路?
不用,跑双端队列bfs就可以了,相关证明无处可寻,感性理解即可。

探讨了一种基于礼物交换的游戏情景,通过构建图模型并利用最短路径算法,解决了一个有趣的问题:如何确定从特定礼物开始,两人之间的礼物交换何时会因缺乏诚意而终止。文章介绍了使用线段树优化建图过程,并采用双端队列BFS算法找到最短路径。
249

被折叠的 条评论
为什么被折叠?



