程设week7 A - TT 的魔法猫(Floyd)

本文介绍了如何运用Floyd算法解决一个传递闭包的问题,涉及到比赛的胜负关系判断。关键在于理解Floyd算法的松弛过程,并在代码实现中注意避免超时和错误的胜负标记。在比赛中,当a赢了b时,仅标记dis[a][b]=1,然后利用Floyd算法检查胜利关系。在第二层循环中进行剪枝,提高效率。
摘要由CSDN通过智能技术生成

题目

样例输入

3
3 3
1 2
1 3
2 3
3 2
1 2
2 3
4 2
1 2
3 4

样例输出

0
0
4

 

思路

这道题需要求解一个传递闭包,那么Floyd算法就可以解决这个问题!!

floyd算法相当暴力:

找一个中继点k,通过对图中的每一条边(若没有边则将其表为inf),假设是(x指向y的边)判断是否能通过中继点进行松弛

(dis[x][k] + dis[k][y] < dis[x][y] 即为松弛成功)。

寻找下一个中继点,重复上述过程,直至通过图中所有点进行松弛。

Floyd算法指路:https://www.cnblogs.com/wangyuliang/p/9216365.html

回到本题:

如果a赢了b,将dis[a][b]标为1,进行Floyd算法,

将松弛条件改为:dis[i][k] == 1 && dis[k][j] &

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值