POJ 3660 Cow Contest (Floyd 传递闭包判连通)
2015-02-09 01:04
483 查看
Cow Contest
Description
N (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 B
Output
* Line 1: A single integer representing the number of cows whose ranks can be determined
Sample Input
Sample Output
Source
USACO 2008 January Silver
题目链接:http://poj.org/problem?id=3660
题目大意:n个人m个关系,a b表示a胜b,问有多少人的名次确定
题目分析:先根据胜负关系建图,map[a][b]表示a名次在b之前,名次具有传递性,也就是如果a胜b,b胜c则a的名次一定在c之前,所以建图完跑一遍Floyd,然后根据点的度数,若度数为n-1,说明其他人与他的关系都确定,则他的名次就可以确定了
Time Limit: 1000MS | Memory Limit: 65536K | |
Total Submissions: 7311 | Accepted: 4045 |
N (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 B
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
Source
USACO 2008 January Silver
题目链接:http://poj.org/problem?id=3660
题目大意:n个人m个关系,a b表示a胜b,问有多少人的名次确定
题目分析:先根据胜负关系建图,map[a][b]表示a名次在b之前,名次具有传递性,也就是如果a胜b,b胜c则a的名次一定在c之前,所以建图完跑一遍Floyd,然后根据点的度数,若度数为n-1,说明其他人与他的关系都确定,则他的名次就可以确定了
#include <cstdio> #include <cstring> int m, n, map[105][105], d[105]; void Floyd() { for(int k = 1; k <= n; k++) for(int i = 1; i <= n; i++) for(int j = 1; j <= n; j++) if(map[i][k] && map[k][j]) map[i][j] = 1; } void cal() { for(int i = 1; i<= n; i++) { for(int j = 1; j<= n; j++) { if(map[i][j]) { d[i] ++; d[j] ++; } } } } int main() { int a, b, ans = 0; memset(map, 0, sizeof(map)); memset(d, 0, sizeof(d)); scanf("%d %d", &n, &m); for(int i = 0; i < m; i++) { scanf("%d %d", &a, &b); map[a][b] = 1; } Floyd(); cal(); for(int i = 1; i <= n; i++) if(d[i] == n - 1) ans ++; printf("%d\n", ans); }
相关文章推荐
- POJ 3660 Cow Contest (floyd 传递闭包)
- poj 3660 Cow Contest(传递闭包 Floyd)
- POJ 3660 Cow Contest (Floyd 传递闭包)
- POJ 3660 Cow Contest (Floyd求传递闭包)
- POJ 3660 Cow Contest(Floyd 传递闭包)
- POJ 3660 Cow Contest 【floyd求传递闭包 + 思维好题】
- Poj 3660 Cow Contest(Floyd解决传递闭包)
- POJ 3660 Cow Contest.(Floyd,传递闭包).
- poj 3660 Cow Contest(传递闭包 Floyd)
- POJ3660 Cow Contest(Floyd求传递闭包)
- POJ-3660 cow contest(floyd求传递闭包)
- POJ 3660 Cow Contest (Floyd 传递闭包)
- POJ 3660 Cow Contest (Floyd运用到传递闭包中~)
- POJ 3660 Cow Contest(Floyd求传递闭包)
- POJ - 3660 - Cow Contest (floyd求传递闭包)
- POJ 3660 cow contest (Folyed 求传递闭包)
- POJ 3660 Cow Contest(传递闭包)
- (POJ 3660)Cow Contest [详解] [floyd] 传递闭包 确定top序列顺序
- Cow Contest POJ - 3660 (floyd求传递闭包)
- POJ - 3660 Cow Contest (floyd)