题目链接:http://poj.org/problem?id=3660
n头牛,如果打败x,被打败y,x+y==n-1;那么这头牛排名就知道了
题目要求输出可被确定的牛数
#include<iostream>
#include<cstring>
#include<algorithm>
#include<cstdio>
using namespace std;
int a[105][105];
int n;
void fdd()
{
int i,j,k;
for(k=1;k<=n;k++)
for(j=1;j<=n;j++)
for(i=1;i<=n;i++)
if(a[i][k]&&a[k][j]&&i!=j)
a[i][j]=1;//不能写成a[i][j]=a[j][i]=1;后面再说
}
int main()
{
int m,i,j;
scanf("%d%d",&n,&m);
memset(a,0,sizeof(a));
int x,y;
while(m--)
{
scanf("%d%d",&x,&y);
a[x][y]=1;//不能写成a[i][j]=a[j][i]=1; 假如 1 打败2,1打败3,
//那么2和3的关系不能确定,如果这样写那么上面注释处就会有错
//(郁闷了好久的,刚开始单纯的因为x和y有关系,并且y和x有关系
}
fdd();
int counte=0,sum=0;
for(i=1;i<=n;i++)
{
counte=0;
for(j=1;j<=n;j++)
if(a[i][j]||a[j][i])//打败或被打败
counte++;
if(counte==n-1)
sum++;
}
printf("%d\n",sum);
return 0;
}