• 【hdu 1285 确定比赛名次】


    确定比赛名次

    Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)
    Total Submission(s): 5289    Accepted Submission(s): 1968


    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
     
    Recommend
    lcy
     
     
     1 // Project name : 1285
     2 // File name    : main.cpp
     3 // Author       : Izumu
     4 // Date & Time  : Sun Jul  8 14:32:46 2012
     5 
     6 #include <iostream>
     7 #include <stdlib.h>
     8 #include <memory.h>
     9 #include <queue>
    10 using namespace std;
    11 
    12 int map[510][510];
    13 int ans[510];
    14 int in[510];
    15 int n,m,a,b;
    16 int q[510],size,top;
    17 void find(){
    18      for(int i=1;i<=n;i++){
    19              if(in[i]==0){
    20                   q[size++] = i;
    21                   //printf("%d\n",i);
    22                   break;
    23              }
    24      }
    25 }
    26 
    27 void findans(){
    28      int t = n,tp;
    29      int k=0;
    30     
    31      while(t--){
    32           find();
    33           tp = q[top++];         
    34           in[tp] = -1;
    35           ans[k++]=tp;
    36           for(int i=1;i<=n;i++){
    37                   if(map[tp][i]){
    38                                  map[tp][i]--;
    39                                  in[i]--;
    40                   }
    41           }
    42           //find();
    43      }
    44 }
    45 
    46 int main(){   
    47     while(scanf("%d%d",&n,&m)!=EOF){
    48           memset(map,0,sizeof(map));
    49           memset(in,0,sizeof(in));
    50           size = top =0;
    51           for(int i=0;i<m;i++){
    52                   scanf("%d%d",&a,&b);
    53                   if(map[a][b]==0){
    54                        map[a][b]=1;
    55                        in[b]++;
    56                   }
    57           }
    58           findans();
    59           printf("%d",ans[0]);
    60           for(int i=1;i<n;i++){
    61                   printf(" %d",ans[i]);
    62           }
    63           printf("\n");
    64     }
    65     return 0;
    66 }
    67 
    68 // end 
    69 // ism 
  • 相关阅读:
    自学Python3.5-字符串格式化 作用域 递归
    自学Python3.2-函数分类(内置函数)
    自学Python3.1-函数基础
    自学Python2.7-collections系列
    自学Python2.6-深浅拷贝
    自学Python2.5-基本数据类型-set集合
    自学Python2.4-基本数据类型-字典dict(objct)
    自学Python2.3-基本数据类型-元组tuple(object) 方法
    自学Python2.2-基本数据类型-列表list(object)
    java通过jdbc访问mysql,update数据返回值的思考
  • 原文地址:https://www.cnblogs.com/ismdeep/p/2582271.html
Copyright © 2020-2023  润新知