程式設計Week7 A TT的魔法貓

2021-10-05 03:51:33 字數 1027 閱讀 1952

給定一張遊戲勝負表,上面有 n 個人以及 m 個勝負關係,每個勝負關係為 a b,表示 a 能勝過 b,且勝負關係具有傳遞性。即 a 勝過 b,b 勝過 c,則 a 也能勝過 c。

求有多少選手的勝負關係不能**。

第一行給出資料組數。

每組資料第一行給出 n 和 m(n , m <= 500)。

接下來 m 行,每行給出 a b,表示 a 可以勝過 b。

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

勝負關係可以轉換為圖的關係,每組勝負關係確定了兩個點的連通情況,勝負關係的傳遞性,就是路徑的傳遞性,因為這是乙個無權圖,因此用乙個bool型別的二維陣列dis來記錄兩個點的連通關係,再利用floyd演算法實現路徑的傳遞即可。

最後題目說明(a,b)和(b,a)是等價的,因此在判斷是需要同時判定dis[i][j]和dis[j][i],均為0時不能**的場次+1,最後輸出即可。

#include

using

namespace std;

bool dis[

510]

[510];

void

floyd

(int n)}}

}}void

output

(int n,

int ans)

} cout<}void

clear

(int n)}}

intmain()

floyd

(n);

output

(n,0);

clear

(n);

}return0;

}

本題是一道明顯的無權圖問題,重點在於路徑的傳遞性,而floyd演算法是解決這個問題的最直觀也最簡單的演算法,總複雜度在o(t*n^3),其中t是資料組數,n<=500,是完全可以控制在時間範圍內的,直接跑就行。

需要注意的是,本題有多組資料,因此每組資料輸出完成後都需要重新對變數進行初始化。

WEEK7 A TT的魔法貓

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

Week7 A TT 的魔法貓(Floyd)

問題描述 n個人玩乙個遊戲,每兩個人都要進行一場比賽。已知m個勝負關係,每個關係為a b,表示a比b強,勝負關係具有傳遞性。試問有多少場比賽的勝負無法預先得知?1 n,m 500 解題思路 1.勝負關係具有傳遞性,可以用floyd演算法求出任意兩點的勝負關係 傳遞閉包 2.d i j max d i...

week7 作業A TT的魔法貓

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