hdu1285 拓扑排序(裸)
生活随笔
收集整理的這篇文章主要介紹了
hdu1285 拓扑排序(裸)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
確定比賽名次
?????????????????????????????????????????????????????????????????? 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個比賽隊(1<=N<=500),編號依次為1,2,3,。。。。,N進行比賽,比賽結束后,裁判委員會要將所有參賽隊伍從前往后依次排名,但現在裁判委員會不能直接獲得每個隊的比賽成績,只知道每場比賽的結果,即P1贏P2,用P1,P2表示,排名時P1在P2之前。現在請你編程序確定排名。 Input 輸入有若干組,每組中的第一行為二個數N(1<=N<=500),M;其中N表示隊伍的個數,M表示接著有M行的輸入數據。接下來的M行數據中,每行也有兩個整數P1,P2表示即P1隊贏了P2隊。 Output 給出一個符合要求的排名。輸出時隊伍號之間有空格,最后一名后面沒有空格。其他說明:符合條件的排名可能不是唯一的,此時要求輸出時編號小的隊伍在前;輸入數據保證是正確的,即輸入數據確保一定能有一個符合要求的排名。 Sample Input 4 3 1 2 2 3 4 3 Sample Output 1 2 4 3 拓撲排序: 定義:①有向無環圖 ②若在有向圖G中從頂點vi到頂點vj有一條路徑,則在拓撲排序中vi必須在vj前面 性質:①如果一次入隊入度為零的點大于1則說明拓撲排序序列不唯一 ②如果排序的總個數小于給定的個數,則說明存在回路 算法:①從有向圖中選取一個入度為0的頂點并且輸出 ②從網中刪除該頂點,并且刪除從該頂點發出的全部有向邊 ③重復①②兩步,直到剩余的網中不再存在入度為0 的頂點為止 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 }
?
轉載于:https://www.cnblogs.com/-sunshine/archive/2012/07/27/2611711.html
總結
以上是生活随笔為你收集整理的hdu1285 拓扑排序(裸)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: JQuery Ajax传递整个表单数据方
- 下一篇: 《真名法典》详细流程攻略(psp)