P3783口胡
作者:互联网
题意有些复杂所以我在这里说一下。。。
给定一张图 \(G\) 和一棵树 \(T\),图上每条边有一个边权 \(w\) 和树上的一个节点 \(u\),经过一条边 \(a\) 后再经过一条边 \(b\) 的代价为 \(b.w+LCA(a.u,b.u)\),求 \(1\) 节点到每个节点的最短路。经过第一条边的代价仅为 \(a.w\)。
首先容易发现信息都是给在边上的,甚至需要计算边对边的信息。所以在点上跑最短路是没有前途的,要把边建成一个点,然后对这些点跑最短路。
再转化成原图上的最短路很简单,把最短路塞到出点上去就行了。
枚举中转点,我们要将入边对应的点连接到出边上面去。
我们将入边和出边在 \(T\) 上的点拉出来建一颗虚树。
对于每个节点,我们开两个在需要跑最短路的图上的节点 \(q\) 和 \(p\)。子树内的入边连接 \(q\),\(p\) 连接子树内的出边。
然后从一条边回溯的时候,令 \(q\) 连接 \(p\) 即可,边权为该节点的深度。要合并 \(q\) 和 \(p\) 也很简单。
然后就做完了。复杂度 \(O(\sum m\log n)\)。
标签:短路,连接,P3783,入边,出边,节点,边权 来源: https://www.cnblogs.com/lmpp/p/16381015.html