zoukankan      html  css  js  c++  java
  • 确定比赛名次(拓扑排序)

    确定比赛名次

    Time Limit : 2000/1000ms (Java/Other)   Memory Limit : 65536/32768K (Java/Other)
    Total Submission(s) : 84   Accepted Submission(s) : 56

    Font: Times New Roman | Verdana | Georgia

    Font Size: ← →

    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
    

    Author

    SmallBeer(CML)

    Source

    杭电ACM集训队训练赛(VII)
     
     
    一开始看了拓扑排序,因为最短路和最小生成树已经写了。就觉得好简单,就自己去写。
    没有去标记出度个数。而是直接在map上操作。每一次找也要遍历一遍。
    看了别人的模板后发现自己真是太蠢了。
     
    #include <iostream>
    #include<string.h>
    using namespace std;
      int n,m;
    int map[501][501];
    int indegree[501];
    void tupo()
    {
        for(int i=1;i<=n;i++)
        for(int j=1;j<=n;j++)
        {
            if(indegree[j]==0)
            {
                indegree[j]--;
                if(i!=n)
                 cout<<j<<" ";
                else
                 cout<<j<<endl;
                for(int k=1;k<=n;k++)
                {
                    if(map[j][k]==1)
                    indegree[k]--;
                }
                break;
            }
        }
    
    }
    int main()
    {
    
      while(cin>>n>>m)
      {
          memset(map,0,sizeof(map));
          memset(indegree,0,sizeof(indegree));
          for(int i=0;i<m;i++)
          {
              int a,b;
              cin>>a>>b;
              if(map[a][b]==0)
              {
                  map[a][b]=1;
                  indegree[b]++;
              }
          }
          tupo();
      }
        return 0;
    }
  • 相关阅读:
    SCU3033 Destroying a Painting(最小费用最大流)
    HDU4859 海岸线(最小割)
    ZOJ3228 Searching the String(AC自动机)
    HUST1024 dance party(最大流)
    SGU438 The Glorious Karlutka River =)(最大流)
    SPOJ839 Optimal Marks(最小割)
    BZOJ1086 [SCOI2005]王室联邦(树分块)
    SCU3109 Space flight(最大权闭合子图)
    HDU3138 Coconuts(最小割)
    ZOJ2539 Energy Minimization(最小割)
  • 原文地址:https://www.cnblogs.com/2014slx/p/7243428.html
Copyright © 2011-2022 走看看