题目蛮有意思的,有n头牛进行比赛,他们之间的比赛结果可以传递,比如a战胜了b,b战胜了c,
那么也可以推出a战胜了c,问有多少头牛的名次可以确定。名次确定就是它战胜的x头牛+战胜它
的y头牛=n - 1,出现这种情况+1即可。今天的开胃菜。。。
/*Accepted 228K 32MS C++ 1056B 2012-09-03 09:46:55*/ #include<stdio.h> #include<string.h> #include<stdlib.h> const int MAXN = 1 << 7; int res[MAXN][MAXN]; int n, m; void ReadGraph() { int a, b; memset(res, 0, sizeof res); while(m --) { scanf("%d%d", &a, &b); res[a][b] = 1; } } void floyd() { int i, j, k; for(k = 1; k <= n; k ++) { for(i = 1; i <= n; i ++) { for(j = 1; j <= n; j ++) { if(res[i][k] && res[k][j]) res[i][j] = 1; } } } } int cal() { int cnt, ans = 0, i, j; for(i = 1; i <= n; i ++) { cnt = 0; for(j = 1; j <= n; j ++) { if(i == j) continue; if(res[i][j] || res[j][i]) cnt ++; } if(cnt == n - 1) ans ++; } return ans; } int main() { while(scanf("%d%d", &n, &m) == 2) { ReadGraph(); floyd(); printf("%d\n", cal()); } return 0; }