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

2021-06-17 18:16:14 字數 876 閱讀 8868

小結。。

1,利用拓撲排序當確定比賽的名次時用toposort()用ans【】記錄入讀為零的點最後再依次輸出即可(((這種情況預設不是環形才可));;注意對入度隨時的處理;;((如hdu1285))

,2,當利用產生冠軍時:記錄 入度,,最後看入度為零的點有幾個如果有多個則沒冠軍,否則反之;;

3,當確定是否能判定名次時(既沒環)用toposort(),與一的區別是,有幾個人就得有幾個為零的入度。。只要有乙個不是,就不能判定。。這個也不需要儲存ans了,,((如hdu3342))

#include

#include

int degree[1001],k;

char name[1001][20];

int fun(char *s)

for(i=0;ifor(j=0;j//

比較看在b[i]中是否存在與a[i]相同的,存在就不是勝利者

k=0;

for(i=0;i//

將全部沒出現在失敗者裡的獲勝者 的編號存放在c陣列裡,然後再比較

}h=0;

for(i=1;iif(strcmp(a[c[i]],a[c[i-1]])==0)

//比較看是否只有乙個人在真的獲勝者之中 

h++;

if(h==k-1)

printf("yes\n");

else

printf("no\n");

}return 0;

}思路一:產生冠軍的條件:(1)獲勝的人沒輸過一次(2)最終獲勝的人只有乙個

思路二:觀察一下,可以看到其實只要總元素數-失敗者==1就可以輸出yes了。。

思路三:左邊的為勝利者,右邊的為失敗者,如果左邊的勝利者只有乙個沒在右邊出現過,那麼這個就是產生的冠軍,否則產生不了

產生冠軍 hdu2094拓撲排序

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

HDU2094 產生冠軍 拓撲排序

題目大意 輸入一些選手之間的比賽結果,問你是否能確定出冠軍。很明顯,冠軍只有乙個,我們可以對於每一組輸入結果,把它存入乙個圖的鄰接矩陣中,然後遍歷入度為0的頂點即可,如果入度為0的頂點只有乙個,那麼很顯然,該頂點對應的選手就是冠軍,如果入度為0的頂點有多個,那麼就表明這些人直接沒有 比出勝負,冠軍就...

hdu2094 產生冠軍 拓撲排序

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