首页 > 其他分享 >旅行者

旅行者

时间:2024-03-17 12:22:36浏览次数:24  
标签:dij 二进制位 所有 旅行者 枚举 我们 关键点

新方法get

法一:我们考虑最终的答案,一定是从某一个关键点 \(A\) 走到另一个关键点 \(B\),那我们要找一种最短路径,保证中途经过两个关键点,而且能够覆盖所有的关键点对。所以我们考虑把其中一部分关键点作为起始点的下一个点,剩下的关键点作为终点的上一个点,于是我们建立两个虚点\(s\)和\(t\),从\(s\)出发向第一部分关键点连有向边,从第二部分关键点向\(t\)连有向边,这样从\(s\)到\(t\)的最短路就包含了\(A\)和\(B\)两部分的所有集合点对。然后我们利用事实,若\(i≠j\),则两者的二进制位一定有一位不同,通过枚举二进制位遍历分组就好了

法二:这就要用到一个比较新的dij的操作了

我们枚举每一条边\((u,v,w)\),如果我们假设某个关键点\(p\)是所有关键点里面到\(u\)最近的一个关键点,\(q\)是\(v\)到所有关键点中最近的一个关键点,那么显然\(p\)->\(u\)->\(v\)->\(q\)就是一种可能的候选答案。我们枚举所有的边,显然就不会漏掉答案,现在的关键问题是怎么求出\(p\)和\(q\)

这就要用到dij的一种骚操作了,先求\(p\)。我们把所有关键点的\(dis\)初始化为\(0\),其余的\(dis\)都为正无穷,然后把所有关键点先一次性加入优先队列里面,然后跑dij就可以了。再求\(q\),这个时候我们在反图上面跑类似的过程就好了

这种方法一般可以用来解决下面的问题:一个图上有若干关键点,求每个点到任意一个关键点的最短距离

标签:dij,二进制位,所有,旅行者,枚举,我们,关键点
From: https://www.cnblogs.com/dingxingdi/p/18078411

相关文章

  • P5304 [GXOI/GZOI2019] 旅行者
    Mikuuu准备投身于ACM的潮流中,失踪人口回归啦!这个题目的思路还是非常有趣的,因为我们可以注意到,两个可能成为答案兴趣点之间的最短路不应该经过了第三个点,如果经过了,显然和第三个点之间的最短路会更小,则原来的两个点之间不应该成为答案。考虑到这一点,我们可以想到建枚举每一条边,......
  • 图论 - 某进制分组 - P5304 旅行者
    P5304旅行者\(\mathtt{TAGS}\):多源多汇最短路,二进制分组\(\mathtt{ESTIMATION}\):非常好二进制分组,让我的大脑旋转题意简述给定\(k\)个点和一张有向图,求以这\(k\)个点为起点和终点的最短路中最短的一条的长度。First.怎么求多源多汇最短路solution.1超级源点和超级......
  • 算法--旅行者过河问题
    1.题目在漆黑的夜里,四位旅行者来到了一座狭窄而且没有护栏的桥边。如果不借助手电筒的话,大家是无论如何也不敢过桥去的。不幸的是,四个人一共只带了一只手电筒,而桥窄得只够......