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