POJ(3660)(Cow Contest )

2018-09-20  本文已影响6人  kimoyami

链接:https://vjudge.net/problem/POJ-3660
思路:首先一个牛如果排名确定,那么打败它的牛+他打败的牛 = n-1,其次如果a打败b,b打败c,可以确定a打败c,综上我们需要求整个图传递闭包,然后统计每个点的度,度数 = n-1的点就是确定的点
代码:

#include<cstdio>
#include<cstring>

int dp[110][110];
int point[110];
int n,m;

int main(){
    memset(dp,0,sizeof(dp));
    scanf("%d%d",&n,&m);
    for(int i=0;i<m;i++){
        int a,b;
        scanf("%d%d",&a,&b);
        a--;
        b--;
        dp[a][b] = 1;
    }
    for(int k=0;k<n;k++){
        for(int i=0;i<n;i++){
            for(int j=0;j<n;j++){
                dp[i][j] = dp[i][j]||(dp[i][k]&&dp[k][j]);//传递闭包
            }
        }
    }
    for(int i=0;i<n;i++){
        for(int j=0;j<n;j++){
            if(dp[i][j]||dp[j][i]){
                point[i]++;
            }
        }
    }
    int res = 0;
    for(int i=0;i<n;i++)if(point[i]==n-1)res++;
    printf("%d\n",res);    
    return 0;
}
上一篇 下一篇

猜你喜欢

热点阅读