• Cow Contest POJ


    N (1 ≤ N ≤ 100) cows, conveniently numbered 1..N, are participating in a programming contest. As we all know, some cows code better than others. Each cow has a certain constant skill rating that is unique among the competitors.

    The contest is conducted in several head-to-head rounds, each between two cows. If cow A has a greater skill level than cow B (1 ≤ AN; 1 ≤ BN; AB), then cow A will always beat cow B.

    Farmer John is trying to rank the cows by skill level. Given a list the results of M (1 ≤ M ≤ 4,500) two-cow rounds, determine the number of cows whose ranks can be precisely determined from the results. It is guaranteed that the results of the rounds will not be contradictory.

    Input

    * Line 1: Two space-separated integers: N and M
    * Lines 2..M+1: Each line contains two space-separated integers that describe the competitors and results (the first integer, A, is the winner) of a single round of competition: A and B

    Output

    * Line 1: A single integer representing the number of cows whose ranks can be determined
     

    Sample Input

    5 5
    4 3
    4 2
    3 2
    1 2
    2 5
    

    Sample Output

    2
    

    题意:n个人,m个关系,每个关系(a b)告诉你,a比b水平高,问你最后有多少人水平是可以确定的。
    思路:刚开始一开这题意就莽拓扑排序,后来发现不对,(想着如果入队多个,说明无序,入队一个就有序,简直睿智)
    其实是用floyd计算传递闭包,最后看对每个人是否关系都确定了。

    (因为我图中只记录了,谁比谁等级高,所以闭包出来,也只有该点是否比其他点等级高,例如 maps【a】【b】,显然缺少一种别点比他高的情况,其实就是maps【b】【a】)
     1 #include<cstdio>
     2 #include<iostream>
     3 
     4 int maps[105][105];
     5 
     6 int n,m;
     7 int main()
     8 {
     9     scanf("%d%d",&n,&m);
    10     for(int j=1; j<=m; j++)
    11     {
    12         int u,v;
    13         scanf("%d%d",&u,&v);
    14         maps[u][v] = 1;
    15     }
    16     for(int k=1; k<=n; k++)
    17     {
    18         for(int i=1; i<=n; i++)
    19         {
    20             for(int j=1; j<=n; j++)
    21             {
    22                 maps[i][j] |= maps[i][k] && maps[k][j];
    23             }
    24         }
    25     }
    26     int num=n;
    27 //    for(int i=1;i<=n;i++)
    28 //    {
    29 //        for(int j=1;j<=n;j++)
    30 //        {
    31 //            printf("%d  ",maps[i][j]);
    32 //        }
    33 //        puts("");
    34 //    }
    35     for(int i=1; i<=n; i++)
    36     {
    37         for(int j=1; j<=n; j++)
    38         {
    39             if(j == i)continue;
    40             if(!maps[i][j] && !maps[j][i])
    41             {
    42                 num--;
    43                 break;
    44             }
    45         }
    46     }
    47     printf("%d
    ",num);
    48 }
    View Code


  • 相关阅读:
    外部主机连接mysql服务器延时严重问题
    linux服务器wget无法成功解析域名及程序获取外网数据不稳定问题
    ecstore后台规格超过一定数量保存丢失
    Stata 指标体系权重的计算
    Stata 无序多分类Logistic回归
    asp.net core 管道模型及中间件MiddleWare原理
    Stata—循环语句
    Stata—更名、排序及表达式
    Stata—文件格式转换
    Stata—基本统计量输出、模型估计和结果输出
  • 原文地址:https://www.cnblogs.com/iwannabe/p/10722810.html
Copyright © 2020-2023  润新知