poj3660

来源:互联网 发布:软件测试基本原则 编辑:程序博客网 时间:2024/06/15 16:33

题意:

第一行:给出n头奶牛,然后给出m个关系(A   B  代表A 大于 B的分数)

第二行:m行数据

问你能够确定几个牛的位置  就是他们的排名

思路:其实就是一个点I能够通过点K找到J,那么I就可以找到J。一个点除了自身 都能找到其他点或者是被其他点找到  那么它的关系便可以确定。

#include <iostream>

#include <cstdio>

#include <algorithm>

#include <cstring>


using namespace std;


int n,m;

int map[150][5000 ];

void floyd()

{

    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;

       }

}

int main()

{

    int ans = 0;

    int u,v;

    scanf("%d%d",&n,&m);

    memset(map,0,sizeof(map));

    for(int j = 1; j <= m; j ++)

       {

           scanf("%d%d",&u,&v);

           map[u][v] = 1;

       }


    floyd();

    for(int i = 1; i <= n; i ++)

    {

        int num = 0;

        for(int j = 1; j <= n; j ++)

        {

            if(map[i][j] || map[j][i])

                num ++;

        }

        if(num == n - 1)

            ans ++;

    }

    printf("%d\n",ans);

    return 0;

}



0 0