http://162.105.81.212/JudgeOnline/problem?id=3660
题意:n个牛参加比赛,给出m 组数据,表示胜负关系,问能准确确定排名的有多少头牛?
分析:我们以N头奶牛作为N个节点,M场比赛结果作为M条有向边
(即a胜过b 则连a->b)
然后利用Floyd算法求出该图的传递闭包map[][]。
显然,如果map[i][j]=1 则i比j强 ,如果map[i][j]=0 则i比j弱,或者不确定
那么对任意一个点i,
如果 map[i][1]+map[i][2]+...+map[i][n] + map[1][i]+map[2][i]+...+map[n][i] = n-1 (*)
那么除i以外的所有点与i的强弱关系都是可以确定的,因此i的排名是可以确定的。(排在他前面的和排在他后面的总共有n-1个的话,当然他的位置也就确定了)。
因此我们在Floyd之后只需要统计有多少个点满足(*)式即可。
下面是强连通图的分支解法,代码注释很清楚了~