• HDU 2094 拓扑排序


    产生冠军

    Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 12031    Accepted Submission(s): 5583

    Problem Description
    有一群人,打乒乓球比赛,两两捉对撕杀,每两个人之间最多打一场比赛。 球赛的规则如下: 如果A打败了B,B又打败了C,而A与C之间没有进行过比赛,那么就认定,A一定能打败C。 如果A打败了B,B又打败了C,而且,C又打败了A,那么A、B、C三者都不可能成为冠军。 根据这个规则,无需循环较量,或许就能确定冠军。你的任务就是面对一群比赛选手,在经过了若干场撕杀之后,确定是否已经实际上产生了冠军。
     
    Input
    输入含有一些选手群,每群选手都以一个整数n(n<1000)开头,后跟n对选手的比赛结果,比赛结果以一对选手名字(中间隔一空格)表示,前者战胜后者。如果n为0,则表示输入结束。
     
     

     
    Output
    对于每个选手群,若你判断出产生了冠军,则在一行中输出“Yes”,否则在一行中输出“No”。
     
    Sample Input
    3 Alice Bob Smith John Alice Smith 5 a c c d d e b e a d 0
     
    Sample Output
    Yes No
     
    今天刚刚学习拓扑排序  最主要的就是入度为零的点的寻找 尤其是这个题目 输入存储 是一个难点  我这种一直使用map  其实也算是一种方法
    只有一个入度为零的点 就可以产生冠军!!!!
    重新开始写博客吧!!
     
     1 #include<bits/stdc++.h>
     2 using namespace std;
     3 map<string,int>in;
     4 map<string,map<string,int> >mp;
     5 map<int,string>dis;
     6 map<string,int>pis;
     7 queue<string> q;
     8 int main()
     9 {
    10     int n;
    11     int coun;
    12     while(scanf("%d",&n)!=EOF)
    13     {
    14         if(n==0)
    15             break;
    16         in.clear();mp.clear();
    17         dis.clear();pis.clear();
    18         coun=1;
    19         string str1,str2;
    20         for(int i=1; i<=n; i++)
    21         {
    22             cin>>str1>>str2;
    23             if(pis[str1]==0)
    24             {
    25                 pis[str1]=1;
    26                 dis[coun++]=str1;
    27             }
    28             if(pis[str2]==0)
    29             {
    30                 pis[str2]=1;
    31                 dis[coun++]=str2;
    32             }
    33             if(mp[str1][str2]==0)
    34             {
    35                 mp[str1][str2]=1;
    36                 in[str2]++;
    37             }
    38         }
    39         int flag=0;
    40         for(int i=1;i<coun;i++)
    41         {
    42             if(in[dis[i]]==0)
    43             {
    44                 flag++;
    45                 q.push(dis[i]);
    46             }
    47         }
    48         if(flag==1)
    49             printf("Yes
    ");
    50         else
    51             printf("No
    ");
    52 }
    53 return 0;
    54 }
  • 相关阅读:
    Lambda表达式介绍 dodo
    VS2010引用App_Code下的类文件问题解决方法(转) dodo
    读取EXCEL文件数字类型字段为空的问题 dodo
    sql server 2000:不能打开到主机的连接,在端口1433:连接失败 dodo
    sql2008附加数据库只读解决办法 dodo
    js倒计时跳转页面 dodo
    orchard上传文件提示System.Web.HttpException: 超过了最大请求长度 dodo
    SQLServer2008设置 开启INTERNET远程连接(转) dodo
    SQLSERVER2008端口改变后的远程连接和数据库连接 dodo
    无法生成临时类(result=1) dodo
  • 原文地址:https://www.cnblogs.com/hsd-/p/4899447.html
Copyright © 2020-2023  润新知