Week7 作業A TT的魔法貓

2021-10-23 02:57:38 字數 1973 閱讀 1243

眾所周知,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。

sample input

333

1213

2332

1223

4212

34

對於每一組資料,判斷有多少場比賽的勝負不能預先得知。注意 (a, b) 與 (b, a) 等價,即每乙個二元組只被計算一次。

sample output

0

04

基本原理:floyd-warshall

用途求取圖中任意兩點之間的距離

過程假設任意兩點之間不允許經過任一點,則此時兩點之間的最短距離即為兩點連線,若無連線則為無窮遠。

此時兩點之間若允許通過點1,則任意兩點x,y之間最短距離如果改變,必然是因為1的引入引起的,此時最短距離為min(f(x,y),f(x,1)+f(1,y));

以此類推直到允許通過的點為1~n(所有點),則此時得到的最短距離必為任意兩點之間的最短距離。

**模板

void

floyd

(int n,

int*

*dis)

本題應用

本題中,除了給定的勝負關係之外,重點是應用勝負關係的傳遞性來求得任意兩點之間的勝負關係,這時便可對上述floyd演算法進行一些改動進行求解。

首先將選手想象成圖中的點,將a戰勝b轉化為ab兩點之間的有向邊,邊長為1。將模板中對任意兩點之間有向邊的更新改為dis[i][j]=max(dis[i][j],dis[i][k]&dis[k][j]),這樣當演算法結束後,便考慮了所有點作為中間點對勝負關係的傳遞,即得到了所有勝負關係,若dis[i][j]與dis[j][i]均為零,則表示勝負不明,否則,勝負關係已明確。

1.兩點之間的勝負關係必須想象為有向邊,若想象成無向邊,會出現勝關係與負關係進行傳遞的情況,使得一些本來勝負關係不明的點標記為已知關係(如:a勝b,b負c,a與c的勝負關係並不明確)。

2.若直接套用模板會出現超時的情況,需進行一定的剪枝,若dis[i][k]為0,則一定不會對d[i][j]進行更新,此時可直接進行一下層迴圈。

#include

#include

using

namespace std;

const

int size=

500+5;

int a[size]

[size]

;int

main

(int argc,

char

** ar**)

for(

int k=

1;k<=n;k++

)for

(int x=

1;x<=n;x++)}

}int count=0;

for(

int x=

1;x<=n;x++

)for

(int y=

1;y(a[x]

[y]==

0&&a[y]

[x]==0)

count++

;printf

("%d\n"

,count);}

return0;

}

week7 作業A TT的魔法貓

眾所周知,tt 有乙隻魔法貓。這一天,tt 正在專心致志地玩 貓和老鼠 遊戲,然而比賽還沒開始,聰明的魔法貓便告訴了 tt 比賽的最終結果。tt 非常詫異,不僅詫異於他的小貓咪居然會說話,更詫異於這可愛的小不點為何有如此魔力?魔法貓告訴 tt,它其實擁有一張遊戲勝負表,上面有 n 個人以及 m 個勝...

Week7 作業 A TT 的魔法貓

眾所周知,tt 有乙隻魔法貓。這一天,tt 正在專心致志地玩 貓和老鼠 遊戲,然而比賽還沒開始,聰明的魔法貓便告訴了 tt 比賽的最終結果。tt 非常詫異,不僅詫異於他的小貓咪居然會說話,更詫異於這可愛的小不點為何有如此魔力?魔法貓告訴 tt,它其實擁有一張遊戲勝負表,上面有 n 個人以及 m 個勝...

WEEK7 A TT的魔法貓

眾所周知,tt 有乙隻魔法貓。這一天,tt 正在專心致志地玩 貓和老鼠 遊戲,然而比賽還沒開始,聰明的魔法貓便告訴了 tt 比賽的最終結果。tt 非常詫異,不僅詫異於他的小貓咪居然會說話,更詫異於這可愛的小不點為何有如此魔力?魔法貓告訴 tt,它其實擁有一張遊戲勝負表,上面有 n 個人以及 m 個勝...