Week7 TT 的魔法貓 弗洛伊德演算法

2021-10-05 01:42:58 字數 1409 閱讀 4618

題目描述

眾所周知,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 個勝...