POJ1975 Median Weight Bead [Floyd]

题意:

给定一个奇数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;
}


你可能感兴趣的:(POJ1975 Median Weight Bead [Floyd])