zoukankan      html  css  js  c++  java
  • floyd(传递闭包)Cow Contest

    Description

    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
    

    题目给出了m对的相对关系,求有多少个排名是确定的。

    使用floyed求一下传递闭包。如果这个点和其余的关系都是确定的,那么这个点的排名就是确定的。

    #include <iostream>
    #include <stdio.h>
    #include <string.h>
    using namespace std;
    #define inf 0x3f3f3f3f
    int map1[5000][5000];
    int main()
    {
        int k,i,j,n,m;
        while(~scanf("%d%d",&n,&m))
        {
            int a,b;
            for(i=1; i<=m; i++)
            {
                scanf("%d%d",&a,&b);
                map1[a][b]=1;
            }
            for(k=1; k<=n; k++)
                for(i=1; i<=n; i++)
                    for(j=1; j<=n; j++)
                        if(map1[i][k]==1&&map1[k][j]==1)
                            map1[i][j]=1;
            int sum=0;
            for(i=1; i<=n; i++)
            {
                for(j=1; j<=n; j++)
                {
                    if(i==j)
                        continue;
                    if(map1[i][j]==0&&map1[j][i]==0)
                        break;
                }
                if(j>n)
                    sum++;
            }
            printf("%d
    ",sum);
        }
        return 0;
    }
  • 相关阅读:
    Maven 环境的配置
    zTree的简单例子
    plsql免安装客户端的配置
    HDU 1232 畅通工程
    HDU 5698 瞬间移动
    Codeforces 1015E1 Stars Drawing (Easy Edition)
    Codeforces 784B Santa Claus and Keyboard Check
    Codeforces 500C New Year Book Reading
    NSarray 赋值 拷贝 等问题记录
    UINavigationController 操作记录
  • 原文地址:https://www.cnblogs.com/zcy19990813/p/9702785.html
Copyright © 2011-2022 走看看