POJ3660 Cow Contest

Posted asumi

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了POJ3660 Cow Contest相关的知识,希望对你有一定的参考价值。

题目链接http://poj.org/problem?id=3660

 

题意:n头牛比赛,有m场比赛,两两比赛,前面的就是赢家。问你能确认几头牛的名次。

 

题解:首先介绍个东西,传递闭包,它可以确定尽可能多的元素之间的关系。

然后回到这道题,怎么能确认这头牛的名次,也就是不管它胜还是败都能推导出其他n-1头牛跟它的关系。具体思想看代码。QWQ

 

代码:

 

 1 #include<cstdio>
 2 #include<cstdlib>
 3 #include<cstring>
 4 #include<iostream>
 5 using namespace std;
 6  
 7 const int maxn = 110;
 8 const int inf = 1e9;
 9 int n,m;
10 int mp[maxn][maxn];
11 
12 void floyd(){
13     for(int k = 1; k <= n ; k++){
14         for(int i = 1; i <= n ;i++){
15             for(int j = 1; j <= n ;j++){
16                 if(mp[i][j] == 1 || (mp[i][k] == 1 && mp[k][j] == 1) ){
17                     mp[i][j] = 1;
18                 }
19             }
20         }
21     }
22 
23 }
24  
25 int main(){
26     cin>>n>>m;
27     for( int i = 1; i <= m ;i++){
28         int x,y;
29         cin>>x>>y;
30         mp[x][y] = 1;
31     }
32     floyd();
33     int ans = 0;
34     for(int i = 1; i <= n ;i++){
35         int cnt = 0;
36         for(int j = 1; j <= n; j++){
37             if(i == j)
38                 continue;
39             if(mp[i][j] == 1 || mp[j][i] == 1){
40                 cnt++;
41             }
42         }
43         if(cnt == n-1)
44             ans++;
45     }
46     cout<<ans<<endl;
47     return 0;
48 }

 

以上是关于POJ3660 Cow Contest的主要内容,如果未能解决你的问题,请参考以下文章

POJ-3660 Cow Contest

POJ3660:Cow Contest(Floyd传递闭包)

POJ-3660.Cow Contest(有向图的传递闭包)

Cow Contest POJ - 3660 floyd传递闭包

poj3660 cow contest

POJ 3360 H-Cow Contest