zoukankan      html  css  js  c++  java
  • POJ

    题意:

    n个点,m条边。

    若A 到 B的边存在,则证明 A 的排名一定在 B 前。

    最后求所有点中,排名可以确定的点的个数。

    n <= 100, m <= 4500

    刚开始还在想是不是拓扑排序。

    n这么小的数据范围,典型的传递闭包。直接可以用Floyd求。

    求出传递闭包之后找哪些点与其他所有点都有直接关系,即所有的点和它之间排名都可以确定。计入答案。

    #include <iostream>
    #include <cstdlib>
    #include <cstdio>
    #include <cstring>
    #include <string>
    using namespace std;
    
    #define maxn 100 + 10
    
    
    int main()
    {
        int n, m, a[maxn][maxn];
        scanf("%d%d", &n, &m);
    
        memset(a, 0, sizeof(a));
    
        for (int i = 1; i <= m; i++)
        {
            int u, v;
            scanf("%d%d", &u, &v);
            a[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 (a[i][k] && a[k][j]) a[i][j] = 1;
    
        int ans = 0;
        for (int i = 1; i <= n; i++)
        {
            bool flag = true;
            for (int j = 1; j <= n; j++)
                if (i != j && !a[j][i] && !a[i][j]) flag = false;
    
            if (flag) ans++;
        }
    
        printf("%d
    ", ans);
    }
  • 相关阅读:
    C# Linq Enumerable 技巧
    Winform 踩坑
    BootStrap Table
    java8+junit5实现并发测试(多线程)
    Junit5+REST-assured 做接口测试
    log4j的使用
    ASP.NET项目启用SSL
    hyper-v虚拟机内存占用过高
    C#使用qq邮箱的smtp服务发邮件
    CALayer设置圆角
  • 原文地址:https://www.cnblogs.com/ruthank/p/9359966.html
Copyright © 2011-2022 走看看