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 }
  • 相关阅读:
    解决:Cuda安装后找不到安装文件目录
    学习论文:Eyeriss v1
    AOD-NET除雾算法
    学习论文AOD-Net:All-in-One Dehazing Network
    学习ResNeXt
    CentOS-7.6-ARM 离线安装部署FastDFS
    CentOS ARM离线安装部署Mysql5.6.44
    NFS+SnapShot快照式备份迁移ES索引过程
    《无限可能:快速唤醒你的学习脑》
    Oracle用sqlplus无法登陆?
  • 原文地址:https://www.cnblogs.com/A-FM/p/5365055.html
Copyright © 2011-2022 走看看