zoukankan      html  css  js  c++  java
  • POJ 3275 Floyd传递闭包

    题意:Farmer John想按照奶牛产奶的能力给她们排序。现在已知有N头奶牛(1 ≤ N ≤ 1,000)。FJ通过比较,已经知道了M(1 ≤ M ≤ 10,000)对相对关系。每一对关系表示为“X Y”,意指X的产奶能力强于Y。现在FJ想要知道,他至少还要调查多少对关系才能完成整个排序。

    思路:
    bitset+Floyd传递闭包。

    // by SiriusRen
    #include <bitset>
    #include <cstdio>
    using namespace std;
    bitset<1005>a[1005];
    int main(){
        int n,m,xx,yy,ans=0;
        scanf("%d%d",&n,&m);
        for(int i=1;i<=m;i++)scanf("%d%d",&xx,&yy),a[xx][yy]=1;
            for(int i=1;i<=n;i++)
                for(int j=1;j<=n;j++)
                    if(a[i][j])a[i]|=a[j];
        for(int i=1;i<=n;i++)
            for(int j=1;j<=n;j++)
                if(a[i][j])ans++;
        printf("%d ",n*(n-1)/2-ans);
    }

    这里写图片描述

  • 相关阅读:
    python实例
    date命令
    unbuntu禁用ipv6
    Oracle学习(一)
    深入浅出区块链笔记
    sqlserver索引
    Go学习(16):网络编程
    Go学习(15):并发与包
    Go学习(14):defer
    Go学习(13):异常
  • 原文地址:https://www.cnblogs.com/SiriusRen/p/6532422.html
Copyright © 2011-2022 走看看