poj3660

来源:互联网 发布:补水的水乳推荐知乎 编辑:程序博客网 时间:2024/06/09 22:34
Cow Contest
Time Limit: 1000MS Memory Limit: 65536KTotal Submissions: 8765 Accepted: 4931

Description

N (1 ≤ N ≤ 100) cows, conveniently numbered 1..N, are participating in a programming contest. As we all know, some cows code better than others. Each cow has a certain constant skill rating that is unique among the competitors.

The contest is conducted in several head-to-head rounds, each between two cows. If cow A has a greater skill level than cow B (1 ≤ A ≤ N; 1 ≤ B ≤ NA ≠ B), then cow A will always beat cow B.

Farmer John is trying to rank the cows by skill level. Given a list the results of M (1 ≤ M ≤ 4,500) two-cow rounds, determine the number of cows whose ranks can be precisely determined from the results. It is guaranteed that the results of the rounds will not be contradictory.

Input

* Line 1: Two space-separated integers: N and M
* Lines 2..M+1: Each line contains two space-separated integers that describe the competitors and results (the first integer, A, is the winner) of a single round of competition: A and B

Output

* Line 1: A single integer representing the number of cows whose ranks can be determined
 

Sample Input

5 54 34 23 21 22 5

Sample Output

2

n个牛,m个信息, x,y,表示x比y牛厉害,判断有多少牛的排名是确定的;

利用闭包传递性,,,   循环查找,牛j前面后面的牛加和等于n-1是该牛名次确定


#include <iostream>#include <stdio.h>#include <math.h>using namespace std;const int inf=0x3f3f3f3f;int map[105][105];int main(){   int n,m;   int x,y;   while(scanf("%d%d",&n,&m)!=-1)   {       for(int i=1;i<=n;i++)        for(int j=1;j<=n;j++)         map[i][j]=9;       for(int i=1;i<=m;i++)       {           scanf("%d%d",&x,&y);           map[x][y]=1;          // map[y][x]=1;       }       for(int k=1;k<=n;k++)       {           for(int i=1;i<=n;i++)           {               for(int j=1;j<=n;j++)               {                   /if(map[i][k]&&map[k][j])                    map[i][j]=1;//min(map[i][k]+map[k][j],map[i][j]);               }           }       }      for(int i=1;i<=n;i++)       {           for(int j=1;j<=n;j++)            cout<<map[i][j]<<" ";           cout<<endl;       }       int ans=0;       for(int i=1;i<=n;i++)       {           int num=0;           for(int j=1;j<=n;j++)           {               //cout<<map[i][j]<<endl;                num=num+map[i][j]+map[j][i];           }           if(num==n-1)            ans++;           //cout<<num<<endl;       }       cout<<ans<<endl;      // cout<<ans<<endl;   }    return 0;}

 

0 0
原创粉丝点击