3A: cow contest

题目来源
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

The meaning of problems

N (1≤N≤100) cows conveniently numbered 1 ... N, is participating in programming contests. As we all know, some coding cow is better than the other. Each cow has a certain constant skill level, which is unique among competitors. Competition is divided into several were head to head, each turn carried out between two cows. If the skill level is higher than cow A cow B (1≤A≤N; 1≤B≤N; A ≠ B), then A will always beat cow cow B. Farmer John attempt by skill level rank cows. Given a list of two lists results M (1≤M≤4,500) M, the determination can accurately determine the number of cows from the results of their grades. We can guarantee the outcome of the bout will not contradictory.
Entry
Line 1: two integers separated by a space: N and M
... M + 1 Line 2: Each line contains two integers separated by spaces, which describe the results of individual competitors and the competition round (first a winner is an integer): a and B
output

line 1: an integer representing the level of which may determine the number of cows

solution

n personal fight, just make sure he beat the man who had played add up to n-1, you can know how his ability to fight, that is, the person's degree and out-degree add up to n-1 to (n-1 individual that is directly or indirectly connected to) ( Floyd so delicious )

Code

#include <iostream>
#include <cstring>
using namespace std;

bool map[105][105];

void floyd(int n){
	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;
			}
		}
	}
}

int main(){
	int n, m;
	cin >> n >> m;
	
	int a, b;
	for(int i=0; i<m; ++i){
		cin >> a >> b;
		map[a][b] = 1;
	} 
	floyd(n);
	
	int ans = 0;
	for(int i=1; i<=n; ++i){
		int sum = 0;
		for(int j=1; j<=n; ++j){
			if(map[i][j] || map[j][i]) sum++;
		}
		if(sum==n-1) ans++;
	}
	cout << ans << endl;
	
	return 0;
}
发布了14 篇原创文章 · 获赞 0 · 访问量 144

Guess you like

Origin blog.csdn.net/loaf_/article/details/104010820