HDU 1258 拓撲排序Kahn演算法

2021-07-22 03:27:27 字數 788 閱讀 1635



問題概述:有n個比賽隊,編號為從1到n,比賽結束後,裁判委員會要將所有參賽隊伍從前往後依次排名,但現在 裁

判委員會不能直接獲得每個隊的比賽成績,

只知道每場比賽的結果,即p1贏p2(用p1 p2表示)這種,排名時p1在 必

須在p2之前,現在請你程式設計序確定排名(答案不止一種,按照隊伍從小到大排列)

輸入樣例:                                  對應輸出:

4 3                                               1 2 4 3

1 22 3

4 3相關知識點:

兩種演算法:

**如下:

#include#include#include#include#include#include#include#include#include#includeusing namespace std;

#define maxn 1004

vectort[maxn];

priority_queue, greater>q;//其頂端元素為最小

int main()

for(i=1;i<=n;i++)//首先找到起初入度為0的點,他們一定排在前邊

while(!q.empty())

}int flag=0;

for(i=1;i<=n;i++)

}if(flag)

printf("error\n");

else

} }

HDU 1258 確定比賽名次 拓撲排序

有n個比賽隊 1 n 500 編號依次為1,2,3,n進行比賽,比賽結束後,裁判委員會要將所有參賽隊伍從前往後依次排名,但現在裁判委員會不能直接獲得每個隊的比賽成績,只知道每場比賽的結果,即p1贏p2,用p1,p2表示,排名時p1在p2之前。現在請你程式設計序確定排名。input 輸入有若干組,每組...

HDU 1258 勝利大逃亡

ignatius被魔王抓走了,有一天魔王出差去了,這可是ignatius逃亡的好機會.魔王住在乙個城堡裡,城堡是乙個abc的立方體,可以被表示成a個b c的矩陣,剛開始ignatius被關在 0,0,0 的位置,離開城堡的門在 a 1,b 1,c 1 的位置,現在知道魔王將在t分鐘後回到城堡,ign...

拓撲排序 Kahn演算法

該演算法的關鍵在於需要維護乙個入度為0的頂點的集合 每次從該集合中取出 如果要求輸出時編號小的在前,可以用優先佇列儲存集合 乙個頂點,將該頂點放入儲存結果的 list中。緊接著迴圈遍歷由該頂點引出的所有邊,從圖中移除這條邊,同時獲取該邊的另外乙個頂點,如果該頂點的入度在減去本條邊之後為0,那麼也將這...