HDU2094 產生冠軍 拓撲排序

2021-06-28 17:41:36 字數 688 閱讀 9961

題目大意:輸入一些選手之間的比賽結果,問你是否能確定出冠軍。

很明顯,冠軍只有乙個,我們可以對於每一組輸入結果,把它存入乙個圖的鄰接矩陣中,然後遍歷入度為0的頂點即可,如果入度為0的頂點只有乙個,那麼很顯然,該頂點對應的選手就是冠軍,如果入度為0的頂點有多個,那麼就表明這些人直接沒有 比出勝負,冠軍就無法產生。

本題的難點就在於輸入字串與數字編碼之間的對應,這點就stl中的map很容易就可以實現。其實我感覺吧,與其說這是一道拓撲排序的題,不如說這是一道考察map函式的問題。

**如下:

#include #include #include #include #include #include using namespace std;

#define maxn 1010

int edge[maxn][maxn];

int ind[maxn];

bool solve(int t)

int main()

t--;

if(solve(t)) puts("yes");

else puts("no");

}return 0;

}

產生冠軍((hdu2094))((拓撲排序))

小結。1,利用拓撲排序當確定比賽的名次時用toposort 用ans 記錄入讀為零的點最後再依次輸出即可 這種情況預設不是環形才可 注意對入度隨時的處理 如hdu1285 2,當利用產生冠軍時 記錄 入度,最後看入度為零的點有幾個如果有多個則沒冠軍,否則反之 3,當確定是否能判定名次時 既沒環 用t...

產生冠軍 hdu2094拓撲排序

題意 給你一些比賽情況,看能否產生冠軍 思路 拓撲排序,給每個字串編乙個號,然後就是建圖,只要找到入度為0的點並且只有乙個那就能產生冠軍,否則不行 include include include include includeusing namespace std char str 2005 100...

hdu2094 產生冠軍 拓撲排序

有一群人,打桌球比賽,兩兩捉對撕殺,每兩個人之間最多打一場比賽。球賽的規則如下 如果a打敗了b,b又打敗了c,而a與c之間沒有進行過比賽,那麼就認定,a一定能打敗c。如果a打敗了b,b又打敗了c,而且,c又打敗了a,那麼a b c三者都不可能成為冠軍。根據這個規則,無需迴圈較量,或許就能確定冠軍。你...