zoukankan      html  css  js  c++  java
  • 巡回赛 -- 简单的拓扑排序

    这是我最爱的 红色  .   NICE       

    题意 : 第一行 测试案例的组数     第二行每一组案例的  拳手个数  和   比赛的场数    如果不能确定唯一的排名 就输出  No Answer        下面附上渣渣代码   

     1 #include<stdio.h>
     2 #include<string.h>
     3 #include<math.h>
     4 #include<iostream>
     5 #include<algorithm>
     6 #include<queue>
     7 #include<vector>
     8 #include<set>
     9 #include<stack>
    10 #include<string>
    11 #include<sstream>
    12 #include<map>
    13 #include<cctype>
    14 using namespace std;
    15 int a[30][30],n,m,visited[30],result[30];
    16 void topsort()   //  有唯一的  序列
    17 {
    18     int mark=0,flag,fuck=1;
    19     for(int i=1;i<=n;i++)   //  从第一名开始找
    20     {
    21         mark=0;
    22         for(int j=0;j<n;j++)   //  从这些人中 开始找
    23         {
    24             if(visited[j]==0)   //  没有爸爸
    25             {
    26                 flag=j;   //   这个 没有 爸爸
    27                 mark++;
    28             }
    29         }
    30         if(mark!=1)  //  1 : mark=0  就是  都有爸爸 , 成环了 2 :  有两个没爸爸的  ,   搞基了
    31         {
    32             fuck=0;
    33             printf("No Answer");
    34             break;
    35         }
    36         result[i]=flag;         //  第一名存起来
    37         visited[flag]--;            //  第一名欠一个爸爸  (  这个人已经被用了  )
    38         for(int k=0;k<n;k++)
    39         {
    40             if(a[k][flag])     //  以刚才没有爸爸的人 做爸爸的 ( 也就是 没有爷爷 )  , 现在爸爸死了 , 儿子们的亲爸爸 -1
    41             {
    42                 visited[k]--;
    43             }
    44         }
    45     }
    46     if(fuck)
    47         for(int i=1;i<=n;i++)
    48         printf("%c",result[i]+'A');
    49     printf("
    ");
    50 }
    51 int main()
    52 {
    53     int t;
    54     scanf("%d",&t);
    55     while(t--)
    56     {
    57         scanf("%d%d",&n,&m);
    58         memset(visited,0,sizeof(visited));
    59         memset(a,0,sizeof(a));
    60         for(int i=0;i<m;i++)
    61         {
    62             char b,c;
    63             scanf(" %c %c",&b,&c);
    64             if(a[c-'A'][b-'A']==0)    //  直接 防止 有重边      //由于 从  高到底输出
    65             {
    66                 a[c-'A'][b-'A']=1;   //   c   有一个  叫做   b 的 爸爸
    67                 visited[c-'A']++;    //  c 的爸爸数 ++
    68             }
    69         }
    70         topsort();
    71     }
    72 }
  • 相关阅读:
    zoj 1239 Hanoi Tower Troubles Again!
    zoj 1221 Risk
    uva 10192 Vacation
    uva 10066 The Twin Towers
    uva 531 Compromise
    uva 103 Stacking Boxes
    稳定婚姻模型
    Ants UVA
    Golden Tiger Claw UVA
    关于upper、lower bound 的探讨
  • 原文地址:https://www.cnblogs.com/A-FM/p/5365055.html
Copyright © 2011-2022 走看看