您的位置:首页 > 其它

POJ-3660 Cow Contest( 最短路 )

2016-07-11 12:45 302 查看
题目链接:http://poj.org/problem?id=3660DescriptionN (1 ≤ N ≤ 100) cows, conveniently numbered 1..N, are participating in a programming contest. As we all know, some cows code better than others. Each cow has a certain constant skill rating that is unique among the competitors.The contest is conducted in several head-to-head rounds, each between two cows. If cow A has a greater skill level than cow B (1 ≤ A ≤ N; 1 ≤ B ≤ N; A ≠ B), then cow A will always beat cow B.Farmer John is trying to rank the cows by skill level. Given a list the results of M (1 ≤ M ≤ 4,500) two-cow rounds, determine the number of cows whose ranks can be precisely determined from the results. It is guaranteed that the results of the rounds will not be contradictory.Input* Line 1: Two space-separated integers: N and M
* 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 BOutput* 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

题目大意:有N头牛,评以N个等级,各不相同,先给出部分牛的等级的高低关系,问最多能确定多少头牛的等级
解题思路:一头牛的等级,当且仅当它与其它N-1头牛的关系确定时确定,于是我们可以将牛的等级关系看做一张图,然后进行适当的松弛操作,得到任意两点的关系,再对没一头牛进行检查即可
#include<iostream>
#include<cstring>
#include<cmath>
#include<algorithm>

using namespace std;

int map[105][105], INF = 0x3f3f3f3f;

int main(){
ios::sync_with_stdio( false );

int n, m;
cin >> n >> m;
memset( map, INF, sizeof( map ) );

int x, y;
for( int i = 0; i < m; i++ ){
cin >> x >> y;
map[x][y] = 1;    //x战胜y
map[y][x] = -1;    //y败于x
}

for( int j = 1; j <= n; j++ )
for( int i = 1; i <= n; i++ )
for( int k = 1; k <= n; k++ ){
if( map[i][j] == map[j][k] && ( map[i][j] == 1 || map[i][j] == -1 ) )    //进行松弛
map[i][k] = map[i][j];
}

int ans = 0;
for( int i = 1; i <= n; i++ ){
int sum = 0;
for( int j = 1; j <= n; j++ ){
if( map[i][j] != INF )
sum++;
}
if( sum == n - 1 )
ans++;
}

cout << ans << endl;

return 0;
}

                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: