P4366 [Code+#4]最短路

P4366 [Code+#4]最短路

一个图有两层:

  • 一层完全图,每对 \(u\)\(v\) 间都有一条边权为 \(u \oplus v\) 的边。
  • 一层给定图,边信息完全给定。这层图的边数 \(m \le 5 \times 10^5\)

求单源最短路。\(n \le 10^5\)


暴力建边 \(n^2\) 不可取,所以优化建图。

第一层是完全图,第二层是直接给定边的图。对第一层优化,然后再加第二层。

想到把 \((u, v, u \oplus v)\) 拆成 \(u \rightsquigarrow v\) 路径的形式,使得路径权值和 \(w\) 满足 \(w \le u \oplus v\)

可以猜想上面这个其实就是 \(w = u \oplus v\)

然后发现可以把 \(u \oplus v\) 二进制拆位,于是可以只保留从每个点开始,边权为 \(2^k\) 的边。

端点范围细节:https://www.luogu.com.cn/discuss/585050

posted @ 2023-03-26 15:56  dbxxx  阅读(105)  评论(0编辑  收藏  举报