【最短路】poj3660 最短路的应用

题意:翻译来自scy

Input


* Line 1: Two space-separated integers: N and M

第一行n和m

 (1 ≤ N ≤ 100)

(1 ≤ M ≤ 4,500) 

* Lines 2..M+1: Each line contains two space-separated integers that describe the competitors and results (the first integer, A, is the winner) of a single round of competition: A and B
下来m行,每行两个数A和B,A是胜出者。
Output


* Line 1: A single integer representing the number of cows whose ranks can be determined
输出一行,一个数,代表能被确定排名的牛的数目。
 


Sample Input
5 5
4 3
4 2
3 2
1 2
2 5


Sample Output

2


做法:其实就是最短路的应用。因为数据范围比较小,本题可以直接用Floyd跑一遍最短路(其实不用记录数值,只需要判断是否联通),如果i赢了a个人(d[i][j]!=INF),输给了b个人(d[j][i]==INF),若a+b==n-1,则i的排名可以确定。


#include
#include
#include
#include
using namespace std;

const int N=110,M=5000,INF=(int)1e8;
int n,m;
bool t[N];
int d[N][N];

void floyd()
{
	int i,j,k;
	for(k=1;k<=n;k++)
	 for(i=1;i<=n;i++)
	  for(j=1;j<=n;j++)
	   d[i][j]=min(d[i][j],d[i][k]+d[k][j]);
}

void solve()
{
	int i,j;
	int g[N],f[N];
	memset(g,0,sizeof(g));
	memset(f,0,sizeof(f));
	for(i=1;i<=n;i++)
	{
		for(j=1;j<=n;j++)
		{
			if(i==j) continue;
			if(d[i][j]


你可能感兴趣的:(最短路)