題目描述
眾所周知,tt 有乙隻魔法貓。
這一天,tt 正在專心致志地玩《貓和老鼠》遊戲,然而比賽還沒開始,聰明的魔法貓便告訴了 tt 比賽的最終結果。tt 非常詫異,不僅詫異於他的小貓咪居然會說話,更詫異於這可愛的小不點為何有如此魔力?
魔法貓告訴 tt,它其實擁有一張遊戲勝負表,上面有 n 個人以及 m 個勝負關係,每個勝負關係為 a b,表示 a 能勝過 b,且勝負關係具有傳遞性。即 a 勝過 b,b 勝過 c,則 a 也能勝過 c。
tt 不相信他的小貓咪什麼比賽都能**,因此他想知道有多少對選手的勝負無法預先得知,你能幫幫他嗎?
輸入格式
第一行給出資料組數。
每組資料第一行給出 n 和 m(n , m <= 500)。
接下來 m 行,每行給出 a b,表示 a 可以勝過 b。
輸出格式
對於每一組資料,判斷有多少場比賽的勝負不能預先得知。注意 (a, b) 與 (b, a) 等價,即每乙個二元組只被計算一次。
輸入樣例
333
1213
2332
1223
4212
34
輸出案例
0
04
題目分析
觀察題目可以發現,這裡是要實現乙個判斷關係傳遞閉包的功能。
其實看到這一題我想到了離散數學集合論和群論中的偏序集。
所以大概就是差不多的意思嘛,哈斯圖。
對於某一比賽情況:
這其實就是當a>b,b>c時,有a>c,符合關係的傳遞性。
但是我們需要注意的是,偏序集是不能比較同級關係的:
注意到這一點之後其他的就基本沒什麼問題了,用弗洛伊德演算法跑一遍就可:
#include
#include
using
namespace std;
bool dis[
501]
[501];
intmain()
for(
int k =
1; k <= n; k++
)for
(int i =
1; i <= n; i++)}
int ans =0;
for(
int i =
1; i <= n; i++
)for
(int j = i +
1; j <= n; j++)}
cout << ans << endl;
}return0;
}
TT的魔法貓(最短路優化Floyd弗洛伊德演算法)
眾所周知,tt 有乙隻魔法貓。這一天,tt 正在專心致志地玩 貓和老鼠 遊戲,然而比賽還沒開始,聰明的魔法貓便告訴了 tt 比賽的最終結果。tt 非常詫異,不僅詫異於他的小貓咪居然會說話,更詫異於這可愛的小不點為何有如此魔力?魔法貓告訴 tt,它其實擁有一張遊戲勝負表,上面有 n 個人以及 m 個勝...
Week7 TT的旅行日記 最短路演算法
題目描述 眾所周知,tt 有乙隻魔法貓。今天他在 b 站上開啟了一次旅行直播,記錄他與魔法貓在喵星旅遊時的奇遇。tt 從家裡出發,準備乘坐貓貓快線前往喵星機場。貓貓快線分為經濟線和商業線兩種,它們的速度與價錢都不同。當然啦,商業線要比經濟線貴,tt 平常只能坐經濟線,但是今天 tt 的魔法貓變出了一...
WEEK7 A TT的魔法貓
眾所周知,tt 有乙隻魔法貓。這一天,tt 正在專心致志地玩 貓和老鼠 遊戲,然而比賽還沒開始,聰明的魔法貓便告訴了 tt 比賽的最終結果。tt 非常詫異,不僅詫異於他的小貓咪居然會說話,更詫異於這可愛的小不點為何有如此魔力?魔法貓告訴 tt,它其實擁有一張遊戲勝負表,上面有 n 個人以及 m 個勝...