POJ - 3660 Cow Contest(floyd)

    xiaoxiao2021-04-14  35

    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; }

    转载请注明原文地址: https://ju.6miu.com/read-669647.html

    最新回复(0)