hdu1285 拓扑排序(裸)
生活随笔
收集整理的這篇文章主要介紹了
hdu1285 拓扑排序(裸)
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
確定比賽名次
?????????????????????????????????????????????????????????????????? Time Limit: 2000/1000 MS (Java/Others)??? Memory Limit: 65536/32768 K (Java/Others)
????????????????????????????????????????????????????????????????????????????? Total Submission(s): 5626??? Accepted Submission(s): 2085
Problem Description 有N個(gè)比賽隊(duì)(1<=N<=500),編號(hào)依次為1,2,3,。。。。,N進(jìn)行比賽,比賽結(jié)束后,裁判委員會(huì)要將所有參賽隊(duì)伍從前往后依次排名,但現(xiàn)在裁判委員會(huì)不能直接獲得每個(gè)隊(duì)的比賽成績(jī),只知道每場(chǎng)比賽的結(jié)果,即P1贏P2,用P1,P2表示,排名時(shí)P1在P2之前。現(xiàn)在請(qǐng)你編程序確定排名。 Input 輸入有若干組,每組中的第一行為二個(gè)數(shù)N(1<=N<=500),M;其中N表示隊(duì)伍的個(gè)數(shù),M表示接著有M行的輸入數(shù)據(jù)。接下來的M行數(shù)據(jù)中,每行也有兩個(gè)整數(shù)P1,P2表示即P1隊(duì)贏了P2隊(duì)。 Output 給出一個(gè)符合要求的排名。輸出時(shí)隊(duì)伍號(hào)之間有空格,最后一名后面沒有空格。其他說明:符合條件的排名可能不是唯一的,此時(shí)要求輸出時(shí)編號(hào)小的隊(duì)伍在前;輸入數(shù)據(jù)保證是正確的,即輸入數(shù)據(jù)確保一定能有一個(gè)符合要求的排名。 Sample Input 4 3 1 2 2 3 4 3 Sample Output 1 2 4 3 拓?fù)渑判?#xff1a; 定義:①有向無環(huán)圖 ②若在有向圖G中從頂點(diǎn)vi到頂點(diǎn)vj有一條路徑,則在拓?fù)渑判蛑衯i必須在vj前面 性質(zhì):①如果一次入隊(duì)入度為零的點(diǎn)大于1則說明拓?fù)渑判蛐蛄胁晃ㄒ?②如果排序的總個(gè)數(shù)小于給定的個(gè)數(shù),則說明存在回路 算法:①?gòu)挠邢驁D中選取一個(gè)入度為0的頂點(diǎn)并且輸出 ②從網(wǎng)中刪除該頂點(diǎn),并且刪除從該頂點(diǎn)發(fā)出的全部有向邊 ③重復(fù)①②兩步,直到剩余的網(wǎng)中不再存在入度為0 的頂點(diǎn)為止 View Code 1 #include <queue> 2 #include <stdio.h> 3 #include <iostream> 4 #include <algorithm> 5 using namespace std; 6 int p[505][505]; 7 int c[505]; 8 int main() 9 { 10 int n,m,x,y; 11 while(scanf("%d%d",&n,&m)!=EOF) 12 { 13 priority_queue<int,vector<int>,greater<int> >pq; 14 for(int i=0;i<=n;i++) 15 { 16 c[i]=0; 17 for(int j=0;j<=n;j++) 18 p[i][j]=0; 19 } 20 for(int i=1;i<=m;i++) 21 { 22 scanf("%d%d",&x,&y); 23 if(p[x][y]==0) 24 c[y]++; 25 p[x][y]=1; 26 } 27 for(int i=1;i<=n;i++) 28 { 29 if(c[i]==0) pq.push(i); 30 } 31 int d=0; 32 while(!pq.empty()) 33 { 34 d==0?d++:printf(" "); 35 printf("%d",pq.top()); 36 int flag=pq.top(); 37 pq.pop(); 38 for(int i=1;i<=n;i++) 39 { 40 if(p[flag][i]==1) 41 { 42 c[i]--; 43 if(c[i]==0) pq.push(i); 44 } 45 } 46 } 47 printf("\n"); 48 } 49 }
?
轉(zhuǎn)載于:https://www.cnblogs.com/-sunshine/archive/2012/07/27/2611711.html
總結(jié)
以上是生活随笔為你收集整理的hdu1285 拓扑排序(裸)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: JQuery Ajax传递整个表单数据方
- 下一篇: 《真名法典》详细流程攻略(psp)