• tyvj2059 元芳看电影


    描述

    神探狄仁杰电影版首映这天,狄仁杰、李元芳和狄如燕去看电影。由于人实在是太多了,入场的队伍变得十分不整齐,一个人的前面可能会出现并排的好多人。
    “元芳,这队伍你怎么看?”
    “大人,卑职看不出这队伍是怎么排的!但是卑职看出了一些两个人之间的前后关系!”
    “那么我们可以写个程序计算出来一定没有和其它人并排的人数。”
    “大人/叔父真乃神人也!”

    输入格式

    第一行两个数N、M,表示队伍一共有N个人,元芳看出了M对关系。
    接下来M行每行两个数a、b,表示a在b的前面(不一定正好在b的前面,ab之间可能有其他人)。

    输出格式

    有多少个人一定没有和其他人并排。

    测试样例1

    输入

    3 2
    1 2
    1 3

    输出

    1

    备注

    对于100%的数据,1<=N<=100,0<=M<=4500。数据保证M对关系不出现矛盾。sjynoi
     
    思路:
    floyd传递闭包,如果所有人除了自己都在都在自己的前或后,就一定不并排
    #include<iostream>
    #include<cstdio>
    #include<string>
    #include<cstring>
    #include<algorithm>
    #include<vector>
    using namespace std;
    const int maxn = 105;
    const int maxint = 100000000;
    int n,m,g[maxn][maxn],tg[maxn][maxn],ans,nowans;
    void input(){
        cin>>n>>m;
        int u,v;
        for(int i = 1;i <= m;i++){
            cin>>u>>v;
            g[u][v] = 1;
        }
    }
    void build(){
        for(int k = 1;k <= n;k++){
            for(int i = 1;i <= n;i++){
                for(int j = 1;j <= n;j++){
                    if(k != i && k != j && i != j) g[i][j] = g[i][j] || (g[i][k] && g[k][j]);
                }
            }
        }
        for(int i = 1;i <= n;i++){
            nowans = 0;
            for(int j = 1;j <= n;j++){
                if(g[i][j]) nowans++;
                if(g[j][i]) nowans++;
            }
            if(nowans == n-1) ans++;
        }
        cout<<ans<<endl;
    }
    int main(){
        input();
        build();
    }
  • 相关阅读:
    Linux常用命令2
    Linux常用命令1
    Nginx配置Kafka
    SpringBoot整合Druid
    spring boot jpa
    mybatis-plus_2
    copy data to map
    HashMap容量问题
    在SpringBoot主启动类中获取实例化的Bean
    Linux环境中Rsync增量备份文件
  • 原文地址:https://www.cnblogs.com/hyfer/p/5812608.html
Copyright © 2020-2023  润新知