POJ 3275 Floyd传递闭包

来源:互联网 发布:易语言编程软件 编辑:程序博客网 时间:2024/05/09 08:34

题意: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);}

这里写图片描述

0 0