zoukankan      html  css  js  c++  java
  • HDU-3342-Legal or Not

    链接:https://vjudge.net/problem/HDU-3342

    题意:

    给出一个有向图,判断是否有环,也就是问是否是有向无环图(DAG),是则输出YES,否则输出NO,所以可以用是否存在拓扑序列来判断。

    思路:

    拓扑排序。记录所有出度为0的点,找出拓扑序,若拓扑序数组的大小不等于n,则存在环。

    代码:

    #include <iostream>
    #include <memory.h>
    #include <vector>
    #include <map>
    #include <algorithm>
    #include <cstdio>
    #include <math.h>
    #include <queue>
    
    using namespace std;
    
    typedef long long LL;
    
    const int MAXN = 500 + 10;
    
    vector<int> Group[MAXN];
    int in[MAXN];
    int n, m;
    
    bool topo()
    {
        vector<int> res;
        priority_queue<int> que;
        for (int i = 0; i <= n - 1;i++)
            if (in[i] == 0)
                que.push(-i);
    
        while (!que.empty())
        {
            int now = -que.top();
            que.pop();
            res.push_back(now);
            for (auto x : Group[now])
                if (--in[x] == 0)
                    que.push(-x);
        }
    
        if (res.size() != n)
            return false;
        else
            return true;
    
    }
    
    int main()
    {
        int l, r;
        while (scanf("%d%d", &n, &m) && n)
        {
            for (int i = 0;i <= n - 1;i++)
                Group[i].clear();
            memset(in, 0, sizeof(in));
    
            for (int i = 1; i <= m; i++)
            {
                scanf("%d%d", &l, &r);
                Group[l].push_back(r);
                in[r]++;
            }
    
            if (topo())
                cout << "YES" << endl;
            else
                cout << "NO" << endl;
    
        }
    
    
        return 0;
    }
    

      

  • 相关阅读:
    分析问题的方法
    听听冯洛伊曼的概念机器的齿轮声
    Nginx支持WebSocket配置
    原型模式
    redis日志位置
    修改centos7远程端口和nginx安全设置
    Java输出小端二进制文件
    centos7安装Java8
    Nginx教程
    centos7.6安装postgresql10
  • 原文地址:https://www.cnblogs.com/YDDDD/p/10486941.html
Copyright © 2011-2022 走看看