zoukankan      html  css  js  c++  java
  • POJ

    题意:有N个奶牛, M个比较,a b标名a能够击败b,问最终能够确定排名的奶牛个数为多少个
    思路:从排序的角度来讲我们肯定会先想到拓扑排序,但是拓扑排序只能知道是否排序唯一,不能够得到
    确定排序的个数
    所以换一个思路如果 一个点与其他所有点之间都有关系那么这个点就能够确定排名
    这就涉及到传递闭包的操作,使用floyd算法

    完整代码:

    #include <iostream>
    #include <cstdio>
    #include <cstring>
    #include <queue>
    using namespace std;
    const int maxn = 105;
    const int maxm = 1e4;
    const int inf = 0x3f3f3f3f;
    int g[maxn][maxn]; 
    int n,m;
    int floyd(){
        int cnt = 0;
        for(int i =1;i<=n;i++)
            for(int k = 1;k<=n;k++)
                for(int j=1;j<=n;j++){
                    if(g[k][i]&&g[i][j]) g[k][j] = 1;//传递关系 
                }
        int tmp = 0;
        for(int i=1;i<=n;i++){
            for(int k=1;k<=n;k++){
                if(k==i) continue;
                if(g[i][k]||g[k][i]) tmp++;//确定是否有联系
            }
            if(tmp == n-1) cnt++;
            tmp = 0;
        }
        return cnt;
    }
    int main(){
        while(cin>>n>>m){
            memset(g,0,sizeof(g));
            for(int i=0;i<m;i++){
                int u ,v;
                cin>>u>>v;
                g[u][v] = 1;
            }
            cout<<floyd()<<endl;
        }
    }
  • 相关阅读:
    2021.1.11
    2021.1.10(每周总结)
    2021.1.9
    2021.1.8
    2021.1.7
    构建之法阅读笔记01
    [java] XML DTD XSD
    详解 泛型 与 自动拆装箱
    详解 正则表达式
    详解 LinkedHashMap
  • 原文地址:https://www.cnblogs.com/Tianwell/p/11288856.html
Copyright © 2011-2022 走看看