[2016-04-03][POJ][3660][Cow Contest]

  • 时间: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

  1. //floyd_warshall
  2. #include <cstdio>
  3. using namespace std;
  4. const int maxn = 100 + 10;
  5. int a[maxn][maxn];
  6. void Floyd_warshall(int n){//注意是k,i,j
  7. for(int k = 1; k <= n ; ++k)
  8. for(int i = 1; i <= n ; ++i)
  9. for(int j = 1;j <= n ; ++j)
  10. a[i][j] = a[i][j] || (a[i][k]&&a[k][j]);
  11. }
  12. int main(){
  13. int n,m,_a,b;
  14. scanf("%d%d",&n,&m);
  15. for(int i = 0;i < m ; ++i){
  16. scanf("%d%d",&_a,&b);
  17. a[_a][b] = 1;
  18. }
  19. Floyd_warshall(n);
  20. int ans = 0;
  21. for(int i = 1 ; i <= n ; ++i){
  22. int cnt = 0;
  23. for(int j = 1;j <= n ; ++j){
  24. if(a[i][j] || a[j][i])
  25. ++cnt;
  26. }
  27. if(cnt == n - 1) ++ans;
  28. }
  29. printf("%d\n",ans);
  30. return 0;
  31. }


来自为知笔记(Wiz)


posted on 2016-04-03 23:15  红洋  阅读(138)  评论(0)    收藏  举报

导航