首页 > 其他 > 详细

POJ 3660 Cow Contest【floyd】

时间:2019-10-10 20:51:24      阅读:71      评论:0      收藏:0      [点我收藏+]

题目链接:

http://poj.org/problem?id=3660

题目大意:

给出n头牛,m个关系,关系为a的战力比b高。求最后可以确定排名的牛的数量

思路:

1.如果一头牛跟其他所有牛都确定了一个输赢关系,那么该牛的排名就得到了确定,所以用floyd跑一遍传递闭包。然后求得每个点的出度(赢了), 入度(输了)。若该点的度之和为 n - 1 ,即确定排名。

技术分享图片
 1 #include<stdio.h>
 2 #include<string.h>
 3 #define mem(a, b) memset(a, b, sizeof(a))
 4 const int MAXN = 110;
 5 
 6 int n;
 7 int map[MAXN][MAXN];  //表示i赢j 
 8 int in[MAXN], out[MAXN];
 9 
10 void floyd()
11 {
12     for(int k = 1; k <= n; k ++)
13         for(int i = 1; i <= n; i ++)
14             for(int j = 1; j <= n; j ++)
15                 if(map[i][k] && map[k][j])
16                     map[i][j] = 1;
17 }
18 
19 int main()
20 {
21     int m;
22     scanf("%d%d", &n, &m);
23     for(int i = 1; i <= m; i ++)
24     {
25         int a, b;
26         scanf("%d%d", &a, &b);
27         map[a][b] = 1;
28     }
29     floyd();
30     for(int i = 1; i <= n; i ++)
31         for(int j = 1; j <= n; j ++)
32             if(map[i][j])
33             {
34                 out[i] ++;
35                 in[j] ++;
36             }
37     int ans = 0;
38     for(int i = 1; i <= n; i ++)
39         if(out[i] + in[i] == n - 1)
40             ans ++;
41     printf("%d\n", ans);
42     return 0;
43 }
View Code

 

POJ 3660 Cow Contest【floyd】

原文:https://www.cnblogs.com/yuanweidao/p/11650093.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!