poj3660-Cow Contest (floyd算法)

题意:给定n个点,m组数据a、b。
如果a>b说明a比b强。求可以确定名次的点的个数。

用floyd算法。指路傻子都能看懂的(不是我说的) floyd算法详程:https://www.cnblogs.com/wangyuliang/p/9216365.html

定义数组e[a][b],如果a比b强,记e[a][b]=1;如果某个点与外界相连有n-1条路,(别人比他强的加上他比别人强的),就可以确定这个点的排名。

#include<iostream>
#define maxn 105
using namespace std;
int e[maxn][maxn];
int main()
{
 int n,m;
 cin>>n>>m;
 //初始化
 for(int i=1;i<=n;i++)
 {
  for(int j=1;j<=n;j++)
  {
   e[i][j]=0;
  }
 }
 int a;
 int b;
 for(int i=0;i<m;i++)
 {
  cin>>a>>b;
  e[a][b]=1;//能到达,标记为1
 }
 for(int k=1;k<=n;k++)
 {
  for(int i=1;i<=n;i++)
  {
   for(int j=1;j<=n;j++)
   {
    if(e[i][k]==1&&e[k][j]==1)
     e[i][j]=1;//能通过中途某个点到达
   }
  }
 }
 int count;
 int ans=0;
 for(int i=1;i<=n;i++)
 {
  count=0;
  for(int j=1;j<=n;j++)
  {
   if(e[i][j]==1||e[j][i]==1)
   {
    count++;
   }
  }
  if(count==n-1)
  {
   ans++;
  }
 }
 cout<<ans<<endl;
}
发布了16 篇原创文章 · 获赞 1 · 访问量 272

猜你喜欢

转载自blog.csdn.net/weixin_44254608/article/details/104642094