zoukankan      html  css  js  c++  java
  • hdu1285 拓扑序

    题意:有N个比赛队(1<=N<=500),编号依次为1,2,3,。。。。,N进行比赛,比赛结束后,裁判委员会要将所有参赛队伍从前往后依次排名,但现在裁判委员会不能直接获得每个队的比赛成绩,只知道每场比赛的结果,即P1赢P2,用P1,P2表示,排名时P1在P2之前。现在请你编程序确定排名。 (中文题面就不讲了)

    主这题需要按字典序最小来排序,所以用优先队列代替队列完成拓扑排序就行。

     1 #include<stdio.h>
     2 #include<string.h>
     3 #include<queue>
     4 #include<algorithm>
     5 using namespace std;
     6 const int maxm=505;
     7 
     8 int id[maxm],n,m;
     9 int ma[maxm][maxm];
    10 
    11 void topo(){
    12     priority_queue<int,vector<int>,greater<int> >q;
    13     for(int i=1;i<=n;i++){
    14         if(!id[i])q.push(i);
    15     }
    16     int cnt=0;
    17     while(!q.empty()){
    18         int u=q.top();
    19         printf("%d",u);
    20         if(++cnt==n)printf("
    ");
    21         else printf(" ");
    22         q.pop();
    23         for(int i=1;i<=n;++i){
    24             if(i==u)continue;
    25             if(ma[u][i]){
    26                 id[i]--;
    27                 if(!id[i])q.push(i);
    28             }
    29         }
    30     }
    31 }
    32 
    33 int main(){
    34     while(scanf("%d%d",&n,&m)!=EOF){
    35         memset(ma,0,sizeof(ma));
    36         while(m--){
    37             int a,b;
    38             scanf("%d%d",&a,&b);
    39             if(!ma[a][b]){
    40                 ma[a][b]=1;
    41                 id[b]++;
    42             }
    43         }
    44         topo();
    45     }
    46     return 0;
    47 }
    View Code
  • 相关阅读:
    附加作业
    个人总结
    wordcount
    vs2013安装及测试
    结对作业电梯调度问题
    阅读下面程序,请回答如下问题:
    补作业:随机生成二元四则运算
    软件工程的认识
    结对编程完结
    结对编程加团队编程
  • 原文地址:https://www.cnblogs.com/cenariusxz/p/4794883.html
Copyright © 2011-2022 走看看