Gzb1128的栖息地

生死之间,地狱前线

[bzoj4289]PA2012 Tax

4289: PA2012 Tax

Time Limit: 10 Sec Memory Limit: 128 MB
Submit: 996 Solved: 299
[Submit][Status][Discuss]
Description

给出一个N个点M条边的无向图,经过一个点的代价是进入和离开这个点的两条边的边权的较大值,求从起点1到点N的最小代价。起点的代价是离开起点的边的边权,终点的代价是进入终点的边的边权
N<=100000
M<=200000
Input

Output

Sample Input

4 5

1 2 5

1 3 2

2 3 1

2 4 4

3 4 8
Sample Output

12
HINT

Source

sol:

挺玄妙的一道题
首先考虑化边为点,把原图的一条边拆成2条有向边,这两条边对应新图的2个点。那么对于a->b,b->c,连接这两条边对应的新图的2个点,边权为max(e1,e2)即可。注意到这种建图在菊花图的情况下会出现m^2条边。
考虑这个max操作巨恶心。
注意到在我们把一条边拆成2条有向边之后。一个入边,连接到小于他的出边的情况下,代价就是这条入边本身,连接到大于他的出边的情况下,代价是这条入边加上出边与他的差值。我们考虑一个差分的做法。枚举一个中转点,将这个中转点的出边进行排序,每一条出边向相邻比他小的出边连接0的有向边,向相邻比他大的出边连接权值的差值,然后每一条入边连向比他小的第一条出边,这样建出来的图边数就是O(m)了。
容易注意到这样的话就是走一条入边相当于直接失去他的代价。然后取max的操作变成取了差值。说起来挺凌乱的,大家可以脑补一下。

阅读更多
版权声明:他无力阻止你的转载 https://blog.csdn.net/qq_36993218/article/details/80658154
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭