zoukankan      html  css  js  c++  java
  • poj 3660 floyed传递闭包

    题意: 给定N点  每个点的等级不同,给定  m 边 表示 n 点相互的的大小关系  ,求可以有多少点等级可以确定
    思路 :一个点 若和其他N-1点有关系 就可以确定他的位置 否则不可以
         所以 Floyd 跑出关系来 也就是跑个闭包

    关于floyd的其他东西  https://blog.csdn.net/wzw1376124061/article/details/69870161

    #include<cstdio>
    #include<iostream>
    #include<queue>
    #include<cstring>
    #include<cmath>
    using namespace std;
    
    #define pb push_back
    #define fi first
    #define se second
    #define pii pair<int,int>
    #define mp make_pair
    const int N=100+4;
    const int INF = 1E9+4;
    
    int n,m;
    int d[N][N];
    //题意: 给定N点 m边 表示n点的大小关系  求可以确定的 点的等级
    //  思路 一个点 若和其他N-1点有关系 就可以确定他的位置 否则不可以
    //  所以 Floyd 跑出关系来  也就是跑个闭包
    
    int main(){
    
        while(cin>>n>>m){
    
            memset(d,0,sizeof(d));
    
            int a,b;
    
            for(int i=0;i<m;++i)
                scanf("%d %d",&a,&b),d[a][b]=1;
    
            int ans= 0 ;
    
            //走一段
            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]);
    
                    }
                }
            }
    
            for(int i=1;i<=n;++i){
                int 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;
    }
  • 相关阅读:
    星空雅梦
    星空雅梦
    星空雅梦
    星空雅梦
    星空雅梦
    星空雅梦
    星空雅梦
    星空雅梦
    lambda表达式
    VIM--保存和退出等命令
  • 原文地址:https://www.cnblogs.com/wjhstudy/p/9756885.html
Copyright © 2011-2022 走看看