美文网首页
POJ(3660)(Cow Contest )

POJ(3660)(Cow Contest )

作者: kimoyami | 来源:发表于2018-09-20 20:17 被阅读6次

    链接: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;
    }
    

    相关文章

      网友评论

          本文标题:POJ(3660)(Cow Contest )

          本文链接:https://www.haomeiwen.com/subject/pbznnftx.html