您的位置:首页 > 其它

poj 3660 Cow Contest ----floyd 传递闭包

2012-03-15 20:29 429 查看
/*
和poj1975(求其可能为中间那个不)有点像,此题也是先floyd,
然后求比他小的和比他大的数量是否为n-1,是则他的位置可以确定
保证(guaranteed)所给数据不冲突
*/

#include<stdio.h>
#include<string.h>
int g[101][101];//g[i][j]表示j比i若
void floyd(int n)
{
int i,j,k;
for(k=1;k<=n;k++)
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
g[i][j]=(g[i][j]||(g[i][k]&&g[k][j]));//若j已经比i若,或有个k可以实现j比k若,k比i若,可得j比i若
}
int main()
{
int a,b,t,n,m,i,j;
memset(g,0,sizeof(g));
scanf("%d%d",&n,&m);
for(i=0;i<m;i++)
{
scanf("%d%d",&a,&b);
g[a][b]=1;
}
floyd(n);
int ans=0;
for(i=1;i<=n;i++)
{
int da=0,xiao=0;
for(j=1;j<=n;j++)
if(g[i][j])
xiao++;
else if(g[j][i])
da++;
if((da+xiao)==(n-1))
ans++;
}
printf("%d\n",ans);
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: