zoukankan      html  css  js  c++  java
  • poj3660 Cow Contest

    题意:

    N个选手,如果A比B强,B比C强,则A必比C强
    告知若干个强弱关系,问有多少人的排名可以确定

    思路:

    如果一个点u, 有x个点能到达此点,从u点出发能到达y个点,若x+y=N-1,则u点的排名是确定的。用floyd算出每两个点之间的距离,最后统计,若dist[a][b] 无穷大且dist[b][a]无穷大,则a和b的排名都不能确定。最后用点个数减去不能确定点的个数即可。

    实现:

     1 #include <iostream>
     2 #include <cstdio>
     3 #include <set>
     4 using namespace std;
     5 
     6 const int INF = 0x3f3f3f3f;
     7 int n, m, a[105][105], x, y;
     8 int main()
     9 {
    10     cin >> n >> m;
    11     for (int i = 1; i <= n; i++)
    12     {
    13         for (int j = 1; j <= n; j++)
    14         {
    15             a[i][j] = INF;
    16         }
    17         a[i][i] = 0;
    18     }
    19     for (int i = 0; i < m; i++)
    20     {
    21         cin >> x >> y;
    22         a[x][y] = 1;
    23     }
    24     for (int k = 1; k <= n; k++)
    25     {
    26         for (int i = 1; i <= n; i++)
    27         {
    28             for (int j = 1; j <= n; j++)
    29             {
    30                 if (a[i][k] + a[k][j] < a[i][j])
    31                 {
    32                     a[i][j] = a[i][k] + a[k][j];
    33                 }
    34             }
    35         }
    36     }
    37     set<int> s;
    38     for (int i = 1; i <= n; i++)
    39     {
    40         for (int j = i + 1; j <= n; j++)
    41         {
    42             if (a[i][j] == INF && a[j][i] == INF)
    43             {
    44                 s.insert(i);
    45                 s.insert(j);
    46             }
    47         }
    48     }
    49     cout << n - s.size() << endl;
    50     return 0;
    51 }
  • 相关阅读:
    HDU 1060 Leftmost Digit
    HDU 1008 Elevator
    HDU 1042 N!
    HDU 1040 As Easy As A+B
    HDU 1007 Quoit Design
    欧拉函数
    HDU 4983 Goffi and GCD
    HDU 2588 GCD
    HDU 3501 Calculation 2
    HDU 4981 Goffi and Median
  • 原文地址:https://www.cnblogs.com/wangyiming/p/6351692.html
Copyright © 2011-2022 走看看