POJ_3660_floyd

POJ 3660

  • 题意:告诉所有奶牛的关系,让你确定奶牛的排名(只有当该奶牛与其他所有奶牛的关系确定了才能确定该奶牛的排名)
  • 通过floyd确定一个点是否能到另一个点.
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
     #include <iostream>

    using namespace std;
    const int maxn = 105;

    int e[maxn][maxn];
    int n,m;

    int floyd() {
    for (int k=1; k<=n; k++)
    for (int i=1; i<=n; i++)
    for (int j=1; j<=n; j++)
    e[i][j] = e[i][j] | (e[i][k] & e[k][j]); //更新每个点与其他所有的点的关系,floyd不仅能求出2点之间的路径,还能求出是否能到
    int ans = 0;
    for (int i=1; i<=n; i++) {
    int tmp = 1;
    for (int j=1; j<=n; j++) {
    if (i == j) continue;
    else {
    tmp = tmp & (e[i][j] | e[j][i]); // 确定该点与其他所有点之间的关系,如果能确定下来,则说明排名能够确定.
    }
    }
    ans += tmp;
    }
    return ans;
    }
    int main() {
    // freopen("a.txt","r",stdin);
    cin >> n >> m;
    for (int i=1; i<=m; i++) {
    int u,v;
    cin >> u >> v;
    e[u][v] = 1;
    }
    printf("%d\n",floyd());
    return 0;
    }

本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!