題目
眾所周知,tt 有乙隻魔法貓。
這一天,tt 正在專心致志地玩《貓和老鼠》遊戲,然而比賽還沒開始,聰明的魔法貓便告訴了 tt 比賽的最終結果。tt 非常詫異,不僅詫異於他的小貓咪居然會說話,更詫異於這可愛的小不點為何有如此魔力?
魔法貓告訴 tt,它其實擁有一張遊戲勝負表,上面有 n 個人以及 m 個勝負關係,每個勝負關係為 a b,表示 a 能勝過 b,且勝負關係具有傳遞性。即 a 勝過 b,b 勝過 c,則 a 也能勝過 c。
tt 不相信他的小貓咪什麼比賽都能**,因此他想知道有多少對選手的勝負無法預先得知,你能幫幫他嗎?
input
第一行給出資料組數。
每組資料第一行給出 n 和 m(n , m <= 500)。
接下來 m 行,每行給出 a b,表示 a 可以勝過 b。
output
對於每一組資料,判斷有多少場比賽的勝負不能預先得知。注意 (a, b) 與 (b, a) 等價,即每乙個二元組只被計算一次。
sample
input
33 3
1 21 3
2 33 2
1 22 3
4 21 2
3 4output00
4解題思路
我們用乙個 dis [x][y] 來表示 x勝過y
利用floyd演算法,求閉包
**實現
#include
using
namespace std;
#define max 505
int n,m;
int a,b;
bool dis[max]
[max]
;void
floyd
(int n)}}
intfind()
//看沒有勝負關係有多少個
}return sum;
}void
ini(
)//初始化
intmain()
floyd
(n);
int s =
find()
; cout
}return0;
}
小結
floyd的演算法複雜度很高,所以我們要適當剪枝,降低複雜度。
TT的魔法貓(最短路優化Floyd弗洛伊德演算法)
眾所周知,tt 有乙隻魔法貓。這一天,tt 正在專心致志地玩 貓和老鼠 遊戲,然而比賽還沒開始,聰明的魔法貓便告訴了 tt 比賽的最終結果。tt 非常詫異,不僅詫異於他的小貓咪居然會說話,更詫異於這可愛的小不點為何有如此魔力?魔法貓告訴 tt,它其實擁有一張遊戲勝負表,上面有 n 個人以及 m 個勝...
Week7 TT 的魔法貓 弗洛伊德演算法
題目描述 眾所周知,tt 有乙隻魔法貓。這一天,tt 正在專心致志地玩 貓和老鼠 遊戲,然而比賽還沒開始,聰明的魔法貓便告訴了 tt 比賽的最終結果。tt 非常詫異,不僅詫異於他的小貓咪居然會說話,更詫異於這可愛的小不點為何有如此魔力?魔法貓告訴 tt,它其實擁有一張遊戲勝負表,上面有 n 個人以及...
Week7 A TT 的魔法貓(Floyd)
問題描述 n個人玩乙個遊戲,每兩個人都要進行一場比賽。已知m個勝負關係,每個關係為a b,表示a比b強,勝負關係具有傳遞性。試問有多少場比賽的勝負無法預先得知?1 n,m 500 解題思路 1.勝負關係具有傳遞性,可以用floyd演算法求出任意兩點的勝負關係 傳遞閉包 2.d i j max d i...