poj 3660 Cow Contest Flyod

来源:互联网 发布:大数据运维工程师要求 编辑:程序博客网 时间:2024/06/10 00:42

题目链接:

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

题意:

给出牛之间的强弱关系,让你确定有多少头牛能够确定其排名。

题解:

就是求出每个点的入度和出度的和,如果是n-1,就可以确定排名
floyd

代码:

#include <iostream>#include <cstdio>#include <cstring>using namespace std;typedef long long ll;#define MS(a) memset(a,0,sizeof(a))#define MP make_pair#define PB push_backconst int INF = 0x3f3f3f3f;const ll INFLL = 0x3f3f3f3f3f3f3f3fLL;inline ll read(){    ll x=0,f=1;char ch=getchar();    while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}    while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}    return x*f;}//////////////////////////////////////////////////////////////////////////const int maxn = 1e5+10;int g[105][105];int main(){    int n=read(), m=read();    for(int i=1; i<=m; i++){        int u,v; scanf("%d%d",&u,&v);        g[u][v] = 1;    }    for(int k=1; k<=n; k++)        for(int i=1; i<=n; i++)            for(int j=1; j<=n; j++)                if(g[i][k]&&g[k][j])                    g[i][j] = 1;    int ans = 0;    for(int i=1; i<=n; i++){        int cnt = 0;        for(int j=1; j<=n; j++){            if(g[i][j] || g[j][i])                cnt++;        }        // cout << cnt << endl;        if(cnt == n-1)            ans++;    }    printf("%d\n",ans);    return 0;}
0 0
原创粉丝点击