BZOJ2750: [HAOI2012]Road(洛谷P2505)

该博客主要探讨了如何解决BZOJ2750和洛谷P2505问题,涉及最短路算法(如Dijkstra或SPFA)以及拓扑排序的应用。通过在最短路径图上进行拓扑排序,博主分别计算了从起点到各点及各点出发的最短路径方案,并分析了边的贡献——即起点到x点最短路乘以v点出发的最短路。
摘要由CSDN通过智能技术生成

最短路 拓扑排序

BZOJ题目传送门
洛谷题目传送门

对于每个点跑一遍最短路(Dij很稳,spfa也可以)。一条边在最短路上当 d [ x ] + d = d [ v ] d[x]+d=d[v] d[x]+d=d[v]。我们对跑出来的图进行拓扑排序,正着做一遍求出从起点到达点 i i i的最短路方案 s 1 [ i ] s1[i] s1[i],倒着做一遍求出以点 i i i为起点的最短路方案 s 2 [ i ] s2[i] s2[i]。一条边在这张图里的贡献就是 s 1 [ x ] ∗ s 2 [ v ] s1[x]*s2[v] s1[x]s2[v]

代码:

#include<queue>
#include<cctype>
#include<cstdio>
#include<cstring>
#include<algorithm>
#define N 1505
#define M 5005
#define F inline
using namespace std;
const long long p=1e9+7;
struct edge{
    int nxt
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值