POJ 3660 Cow Contest(floyd传递关系闭包)

题 意:给牛的数量n和m对输赢关系,若n头牛之间都存在输赢关系(可传递,例如A赢B,B赢C,,那么可以认为A赢C),则该牛名次确定。

思 路:用floyd传递关系

#include<cstdio>#include<cstring>#include<algorithm>#include<iostream>using namespace std;int n,m;bool mapp[105][105];int cnt[105];void floyd(){for(int k=1;k<=n;k++)for(int i=1;i<=n;i++)for(int j=1;j<=n;j++)if(mapp[i][j]>mapp[i][k]+mapp[k][j]){mapp[i][j]=0;cnt[i]++;cnt[j]++;}}void debug(){for(int i=1;i<=n;i++,puts(""))for(int j=1;j<=n;j++)printf("%3d",mapp[i][j]);puts("");}int main(){while(~scanf("%d%d",&n,&m)){memset(cnt,0,sizeof(cnt));int ans=0;for(int i=1;i<=n;i++)for(int j=1;j<=n;j++)mapp[i][j]=mapp[j][i]= i==j? 0:1;while(m–){int u,v;scanf("%d%d",&u,&v);mapp[u][v]=0;cnt[u]++;cnt[v]++;}floyd();for(int i=1;i<=n;i++)if(cnt[i]==n-1) ans++;printf("%d\n",ans);}return 0;}

昨晚多几分钟的准备,今天少几小时的麻烦。

POJ 3660 Cow Contest(floyd传递关系闭包)

相关文章:

你感兴趣的文章:

标签云: