小結。。
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三者都不可能成為冠軍。根據這個規則,無需迴圈較量,或許就能確定冠軍。你...