zoj 3232 It's not Floyd Algorithm

这道题的意思就是给出一个有向无环图的传递闭包,要求出一个最小边的有向图满足这个矩阵,求出最少的边数是多少。

flyod 的 作用就是讲一个有向图转化成传递闭包,那么这么不就是一个逆过程吗。第一个想法,如果map[i][f] == 1,那么就先将所有的边加到图中,然后开始删边,如果i到k有边,k到f有边,那么i到k的边就是多余的,可以删去,而且这个过程是贪心的,删了这条边并没有实质性的印象,而且删的顺序也并没有关系,这一步是贪心的做法,可以多删一条算一条。

恩 那么写了算法之后得到了wrong answer,问题出在哪里,那就如果形成了一个环,那么其中一条边就是可以由其他边走到,那么在操作之后整个环都被删掉了,所以说我们刚才的算法仅对于无环图是起作用的。

那么有环怎么去处理呢,强连通缩点,缩完之后很显然,一个n个点构成的强连通分量里面仅最少需要n条边构成一个环即可,然后对于缩完点之后的图我们再采用上面的o(n^3)的方法暴力删去每一条边,整个算法就ok了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值