您的位置:首页 > 其它

POJ 3275 Floyd传递闭包

2016-07-05 21:07 225 查看

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

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: