bzoj3694最短路

该博客讨论了如何在无向图中构建最短路树,并求解从源点1到其他点不经过最短路树上特定边的最短路径。作者提出了一种O(n^2 + m)的时间复杂度的解决方案,涉及到树形DP和通过非树边对最短路径的贡献。此外,还提到了其他可能的解题思路,如树剖维护。
摘要由CSDN通过智能技术生成

bzoj3694最短路

Description

给出一个n个点m条边的无向图,n个点的编号从1~n,定义源点为1。定义最短路树如下:从源点1经过边集T到任意一点i有且仅有一条路径,且这条路径是整个图1到i的最短路径,边集T构成最短路树。 给出最短路树,求对于除了源点1外的每个点i,求最短路,要求不经过给出的最短路树上的1到i的路径的最后一条边。
 
Input

第一行包含两个数n和m,表示图中有n个点和m条边。
接下来m行,每行有四个数ai,bi,li,ti,表示图中第i条边连接ai和bi权值为li,ti为1表示这条边是最短路树上的边,ti为0表示不是最短路树上的边。
Output

输出n-1个数,第i个数表示从1到i+1的要求的最短路。无法到达输出-1。
Sample Input

5 9
3 1 3 1
1 4 2 1
2 1 6 0
2 3 4 0
5 2 3 0
3 2 2 1
5 3 1 1
3 5 2 0
4 5 4 0
Sample Output

6 7 8 5
HINT

 对于100%的数据,n≤4000,m≤100000,1≤li≤100000


solution

我的方法很诡异

首先删一条边相当于把一棵子树孤立出来。

那么答案应要通过其他边绕到子树外面的点,再回到根。

我们记d[i][j]表示以i为根的子树到其他点的最短路。

可以用类似树形dp的方法把儿子的信息合并上来。

O(n^2+m)

 </

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值