时间:2016-04-03 22:41:13 星期日
题目编号:[2016-04-03][POJ][3660][Cow Contest]
题目大意:给出n头牛m场比赛的结果,问能否确定每头牛的能力等级
分析:
- 如果牛的能力等级确定,那么一定知道这头和其他n-1头牛的关系,
- 题目变成了,求整个图的闭包之后,度数为n-1的节点的数目
- 用floyd_warshall算法,求出整个图的传递闭包(每两个点的传递关系),最后计算每个节点确定的关系是否为n - 1
遇到的问题:floyd 是 k i j
//floyd_warshall#include <cstdio>using namespace std;const int maxn = 100 + 10;int a[maxn][maxn];void Floyd_warshall(int n){//注意是k,i,j for(int k = 1; k <= n ; ++k) for(int i = 1; i <= n ; ++i) for(int j = 1;j <= n ; ++j) a[i][j] = a[i][j] || (a[i][k]&&a[k][j]);}int main(){ int n,m,_a,b; scanf("%d%d",&n,&m); for(int i = 0;i < m ; ++i){ scanf("%d%d",&_a,&b); a[_a][b] = 1; } Floyd_warshall(n); int ans = 0; for(int i = 1 ; i <= n ; ++i){ int cnt = 0; for(int j = 1;j <= n ; ++j){ if(a[i][j] || a[j][i]) ++cnt; } if(cnt == n - 1) ++ans; } printf("%d\n",ans); return 0;}