IT民工
加油!

题目蛮有意思的,有n头牛进行比赛,他们之间的比赛结果可以传递,比如a战胜了b,b战胜了c,

那么也可以推出a战胜了c,问有多少头牛的名次可以确定。名次确定就是它战胜的x头牛+战胜它

的y头牛=n - 1,出现这种情况+1即可。今天的开胃菜。。。

/*Accepted    228K    32MS    C++    1056B    2012-09-03 09:46:55*/
#include<stdio.h>
#include<string.h>
#include<stdlib.h>

const int MAXN = 1 << 7;
int res[MAXN][MAXN];
int n, m;
void ReadGraph()
{
    int a, b;
    memset(res, 0, sizeof res);
    while(m --)
    {
        scanf("%d%d", &a, &b);
        res[a][b] = 1;
    }
}

void floyd()
{
    int i, j, k;
    for(k = 1; k <= n; k ++)
    {
        for(i = 1; i <= n; i ++)
        {
            for(j = 1; j <= n; j ++)
            {
                if(res[i][k] && res[k][j])
                    res[i][j] = 1;
            }
        }
    }
}

int cal()
{
    int cnt, ans = 0, i, j;
    for(i = 1; i <= n; i ++)
    {
        cnt = 0;
        for(j = 1; j <= n; j ++)
        {
            if(i == j) continue;
            if(res[i][j] || res[j][i])
                cnt ++;
        }
        if(cnt == n - 1)
            ans ++;
    }
    return ans;
}

int main()
{
    while(scanf("%d%d", &n, &m) == 2)
    {
        ReadGraph();
        floyd();
        printf("%d\n", cal());
    }
    return 0;
}

 

 

posted on 2012-09-03 10:03  找回失去的  阅读(185)  评论(0)    收藏  举报