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
Sample Output
* 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; }
相关文章推荐
- Dijkstra算法
- 文章标题
- C#中MessageBox用法大全
- svn插件Subclipse
- PHP导出数据到CSV文件函数/方法
- 160706、Java HashMap工作原理及实现
- 删除字符串中出现次数最少的字符
- Qt5中文乱码问题
- Merge Sorted Array
- 【sublime text 开发常用插件】
- 查看编译后的calss文件编译jdk版本
- linux(centos)搭建SVN服务器
- struts2 s:if标签以及 #,%{},%{#}的使用方法等
- 电影分享
- Windows主机里利用VMware安装Linux(CentOS)虚拟机,Host-only连接上网方式详解
- 160705、总结:commons-codec.jar中常用方法
- 音乐分享
- CentOS Linux系统下更改Apache默认网站目录
- 160704、commons-beanutils.jar常用方法
- 简单使用Junit