题意:
给定一个奇数n,和m组两数之间的关系。问可以排除多少个可以确定非中位数的数。
思路:
floyd传递闭包。一次AC。有点太水了这题。
#include<iostream>
#include<algorithm>
#define max(a,b) (a>b?a:b)
#define abs(a) ((a)>0?(a):-(a))
#define min(a,b) (a<b?a:b)
using namespace std;
const int N=105;
int mat[N][N];
int n,m;
void floyd()
{
for(int k=1;k<=n;k++)
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
{
if(mat[i][k]==1&&mat[k][j]==1)
mat[i][j]=1;
else if(mat[i][k]==-1&&mat[k][j]==-1)
mat[i][j]=-1;
}
}
int main()
{
int cases;
scanf("%d",&cases);
while(cases--)
{
memset(mat,0,sizeof(mat));
scanf("%d%d",&n,&m);
int u,v;
for(int i=1;i<=m;i++)
{
scanf("%d%d",&u,&v);
mat[u][v]=1;
mat[v][u]=-1;
}
floyd();
int ans=0;
for(int i=1;i<=n;i++)
{
int neg=0,posi=0;
for(int j=1;j<=n;j++)
{
if(mat[i][j]>0)
{
posi++;
}
else if(mat[i][j])
{
neg++;
}
}
if(neg>=(n+1)/2)
{
ans++;
}
else if(posi>=(n+1)/2)
{
ans++;
}
}
printf("%d\n",ans);
}
return 0;
}