zoukankan      html  css  js  c++  java
  • warshall 求传递闭包 Cow Contest POJ

    题目大意:一群牛比赛,每场两只牛对打,并分出胜负,现在问你能确定几只牛的战斗力排名。

    如果a>b,b>c,那么c一定小于a.用wallshall算法算出比某个元素大的元素,如果比该元素大的和比该元素小的数量为n-1,那么就可以确定排名。(即该元素可以到达任何元素)

    #include<iostream>
    #include<cstdio>
    #include<cstring>
    #include<algorithm>
    #include<string>
    #define inf 0x3f3f3f
    using namespace std;
    int a[105][105];
    int main()
    {
        int n,m;
        cin>>n>>m;
        memset(a,0,sizeof(a));
        while(m--)
        {
            int x,y;
            cin>>x>>y;
            a[y][x]=1;
        }
        for(int k=1;k<=n;k++)//warshall算出传递闭包
            for(int i=1;i<=n;i++)
              for(int j=1;j<=n;j++)
              if(a[i][j]||(a[i][k]&a[k][j]))
                   a[i][j]=1;
        int ans=0;
        for(int i=1;i<=n;i++)
        {
            int g=0;
            for(int j=1;j<=n;j++)
            {
                if(a[i][j]) g++;//统计比i大的元素
                if(a[j][i]) g++;//统计比i小的元素
            }
            if(g==n-1) ans++;
        }
        cout<<ans<<endl;
    
    }
  • 相关阅读:
    2.1 maven配置多镜像地址
    6.4 SpringData JPA的使用
    4.3 thymeleaf模板引擎的使用
    java面试题整理
    eclipse配置运行时变量
    postman上传文件
    Python定义字符串、循环
    Charles抓包
    jmeter压测
    JMeter,postman
  • 原文地址:https://www.cnblogs.com/Twsc/p/7260154.html
Copyright © 2011-2022 走看看