转化成有向图
先floyd求出之间的大小关系
然后计算每个点i的 比它重的和比它轻的 若比一半大 ans++;
#include "stdio.h"
#include "string.h"
#include "math.h"
#include "stdlib.h"
int main()
{
int t,n,m,a,b,k,ans,i,j;
int map[101][101];
scanf("%d",&t);
while (t--)
{
scanf("%d%d",&n,&m);
memset(map,0,sizeof(map));
while (m--)
{
scanf("%d%d",&a,&b);
map[a][b]=1;
}
for (i=1;i<=n;i++)
for (j=1;j<=n;j++)
for (k=1;k<=n;k++)
if (map[j][i]==1 && map[i][k]==1) map[j][k]=1;
ans=0;
m=(n+1)/2;
for (i=1;i<=n;i++)
{
a=b=0;
for (j=1;j<=n;j++)
if (map[i][j]==1) a++;
for (j=1;j<=n;j++)
if (map[j][i]==1) b++;
if (a>=m || b>=m) ans++;
}
printf("%d\n",ans);
}
return 0;
}