POJ

来源:互联网 发布:js调用高德地图api 编辑:程序博客网 时间:2024/06/15 07:10

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

题意:n个奶牛,给你m对奶牛互相胜负的关系,让求有多少奶牛的名次可以确定。

思路:如果这个奶牛,意即这个奶牛和其他n-1个奶牛的关系已经确定,所以我们只需要count多少奶牛符合这种条件。

如果要确定没有直接胜负关系的奶牛们,要用floyd算法确定各奶牛间的关系。

代码:

#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>using namespace std;const int N = 100+5;int a[N],d[N][N];void floyd(int n){    for(int k = 1;k <= n;k++)        for(int i = 1;i <= n;i++)            for(int j = 1;j <= n;j++)                d[i][j] = d[i][j] || (d[i][k] && d[k][j]);}int main(){    int n,m;    cin>>n>>m;    for(int i = 1;i <= n;i++)        for(int j = 1;j <= n;j++)            d[i][j] = 0;    int u,v;    for(int i = 1;i <= m;i++)    {        scanf("%d%d",&u,&v);        d[u][v] = 1;    }    floyd(n);    int ans = 0,cnt;    for(int i = 1;i <= n;i++)    {        cnt = 0;        for(int j = 1;j <= n;j++)            if(d[i][j] || d[j][i])                cnt++;        if(cnt == n-1)            ans++;    }    cout<<ans<<endl;    return 0;}


0 0
原创粉丝点击