[NOI 2007]社交网络(Floyd)

本文深入探讨了Floyd算法在动态规划中的应用,通过计数动态规划的方式,不仅找到两点间的最短路径,还能计算出最短路径的数量。文章详细介绍了如何通过松弛操作更新路径数量,并给出具体实现代码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目见:

http://www.ruvtex.cn/cogs/problem/pdetail.php?pid=15

 

这个题让我对floyd有了一个更好的认识。

 

floyd实际上是一个动态规划的过程。对于这个利用松弛进行的动态规划,我们能从中得到很多其他的信息。首先,如果说一个两个点之间的松弛点式确定的,那么我们就可以确定两点间的一条最短路径。还可以进行floyd找最小环的工作。

 

这个题目就是利用floyd进行的一个计数的动态规划。我们知道,对于两点和他们最短路上的一个点来说,这两点最短路的个数就是起点到这个点最短路的个数和这个点到终点的最短路个数的乘积。那么对于这道题来说,我们在求最短路的过程中不断地更新这个值就好。

 

dis[i,j]表示i,j最短路径。floyd进行松弛,如果可以松弛,那么用count[i,j]记录I,j最短路的个数。count[i,j]:=count[i,k]*count[k,j]。

如果说他刚好就是另一条最短路,就是满足dis[i,j]=dis[i,k]+dis[k,j]那么就有count[i,j]:=count[i,j]+count[i,k]+count[k,j]。

 

然后根据题目要求统计求解就可以了。

 

P.S. 现在终于体会到wangsincos大牛给我的启发…………无穷大不能用maxlongint,要自己设。否则,…………有可能会搞到负数那里去~~

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值