zoukankan      html  css  js  c++  java
  • POJ 3660 Cow Contest(求图的传递性)

    题意:

    给定n头牛, 然后有m个比较, 求出有多少头牛能确定自己的排名。

    分析:

    假设有一头牛a, 有ki头牛强于自己, kj头牛弱于自己, ki + kj == n-1时, 那么这头牛的排名就确定了。

    对于每个比较建一条有向边

    求出a点可达哪些点, 哪些点可达a点即可

    #include<cstdio>
    #include<string>
    #include<iostream>
    #include<cstring>
    #include<vector>
    #include<map>
    #include<queue>
    #define rep(i,a,b) for(int i = a; i < b; i++)
    #define _rep(i,a,b) for(int i = a; i <= b; i++)
    using namespace std;
    const int maxn = 107;
    const int inf = 1e9;
    int G[maxn][maxn];
    int n , m;
    int main()
    {
        while(~scanf("%d %d", &n, &m)){
            rep(i,1,maxn) rep(j,1,maxn) G[i][j] = 0;
    
            rep(i,0,m) {
                int u, v;
                scanf("%d %d", &u, &v);
                G[u][v] = 1;
            }
            for(int k = 1; k <= n; k++){
                for(int i = 1; i <= n; i++){
                    for(int j = 1; j <= n; j++){
                        if(G[i][j] == 0) G[i][j] = G[i][k] && G[k][j]; //只有当 G[i][k] && G[k][j] 都有路时, G[i][j]才算联通
                    }
                }
            }
            int ans = 0;
            _rep(i,1,n){
                int cnt = 0;
                _rep(j,1,n){
                    if(G[i][j]) cnt++;
                    if(G[j][i]) cnt++;
                }
                if(cnt == n - 1) ans++;
            }
            printf("%d
    ", ans);
        }
        return 0;
    }
  • 相关阅读:
    Android Studio不自动代码提示问题解决
    公司邮箱
    IntentService2
    python帮助信息和常见强制转换
    列表,字典的常用方法
    python的类型(一)
    python运算符
    pycharm调试技巧
    python开发工具
    python安装
  • 原文地址:https://www.cnblogs.com/Jadon97/p/8342205.html
Copyright © 2011-2022 走看看