首页 > 学院 > 开发设计 > 正文

poj 3660 Cow Contest

2019-11-06 06:49:58
字体:
来源:转载
供稿:网友

Cow Contest

题目链接:http://poj.org/PRoblem?id=3660

题目大意:求出能够确定排名的牛的个数。

有点类似于闭包传递,转化成图的连通性。最后统计各点的出入度等于n-1的便是符合要求的。

代码如下:

#include<cstdio>#include<iostream>#include<cstring>#define INF 100000000using namespace std;int map[105][105];int dis[105],vi[105];int ans[105];void Dj(int x,int n){	for(int i=1;i<=n;i++)	{		dis[i]=map[x][i];		vi[i]=0;	}	vi[x]=1;	for(int i=2;i<=n;i++)	{		int p;		for(int j=1;j<=n;j++)		{			if(!vi[j] && dis[j]<INF)			{				p=j;				break;			}		}		vi[p]=1;		for(int j=1;j<=n;j++)		{			if(!vi[j] && dis[j]>=map[p][j])				dis[j]=map[p][j];		}	}}int main(){	int n,m;	int x,y;	int sum;	while(~scanf("%d%d",&n,&m))	{		sum=0;		for(int i=0;i<=n;i++)			ans[i]=0;		for(int i=0;i<=n;i++)			for(int j=0;j<=n;j++)				map[i][j]=INF;		for(int i=0;i<m;i++)		{			cin>>x>>y;			map[x][y]=1;		}		for(int i=1;i<=n;i++)		{			Dj(i,n);			for(int j=1;j<=n;j++)			{				if(dis[j]<INF)				{					ans[j]++;					ans[i]++;				}			}		}		for(int i=1;i<=n;i++)		{			if(ans[i]==n-1)			{				sum++;			}		}		printf("%d/n",sum);	}		return 0;}


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表