hdu 3342 Legal or Not

原创 2015年07月11日 10:47:15

原题链接:http://acm.hdu.edu.cn/showproblem.php?pid=3342
拓扑排序。。

#include<algorithm>
#include<iostream>
#include<cstdlib>
#include<cstring>
#include<cstdio>
#include<vector>
#include<queue>
#include<map>
using std::cin;
using std::cout;
using std::endl;
using std::find;
using std::sort;
using std::map;
using std::pair;
using std::queue;
using std::vector;
using std::multimap;
#define pb(e) push_back(e)
#define sz(c) (int)(c).size()
#define mp(a, b) make_pair(a, b)
#define all(c) (c).begin(), (c).end()
#define iter(c) decltype((c).begin())
#define cls(arr,val) memset(arr,val,sizeof(arr))
#define cpresent(c, e) (find(all(c), (e)) != (c).end())
#define rep(i, n) for (int i = 0; i < (int)(n); i++)
#define tr(c, i) for (iter(c) i = (c).begin(); i != (c).end(); ++i)
const int N = 10010;
typedef unsigned long long ull;
struct Node { int to, next; };
struct TopSort {
    Node G[N];
    int tot, topNum, inq[N], head[N];
    inline void init() {
        tot =  topNum = 0;
        cls(inq, 0), cls(head, -1);
    }
    inline void add_edge(int u, int v) {
        G[tot].to = v; G[tot].next = head[u]; head[u] = tot++;
    }
    inline void built(int m) {
        int u, v;
        rep(i, m) {
            scanf("%d %d", &u, &v);
            inq[v]++;
            add_edge(u, v);
        }
    }
    inline void bfs(int n) {
        queue<int> q;
        rep(i, n) { if (!inq[i]) q.push(i); }
        while (!q.empty()) {
            int u = q.front(); q.pop();
            topNum++;
            for (int i = head[u]; ~i; i = G[i].next) {
                if (--inq[G[i].to] == 0) q.push(G[i].to);
            }
        }
        puts(topNum == n ? "YES" : "NO");
    }
}work;
int main() {
#ifdef LOCAL
    freopen("in.txt", "r", stdin);
    freopen("out.txt", "w+", stdout);
#endif
    int n, m;
    while (~scanf("%d %d", &n, &m), n + m) {
        work.init();
        work.built(m);
        work.bfs(n);
    }
    return 0;
}

相关文章推荐

hdu 3342 Legal or Not

Legal or Not Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) T...

hdu3342 Legal or Not(拓扑排序)

http://acm.hdu.edu.cn/showproblem.php?pid=3342 题意:如果有A认为他是B的师傅,B认为A是他的师傅,那就说这里出现了矛盾,是不合法的。 思路:本题利...

hdu3342Legal or Not(拓扑排序)

Legal or Not Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) T...

hdu3342 Legal or Not 拓扑排序

Legal or Not Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) T...

HDU3342 - Legal or Not 拓补排序模板

HDU3342 - Legal or Not 拓补排序模板

[ACM] hdu 3342 Legal or Not (拓扑排序)

Legal or Not Problem Description ACM-DIY is a large QQ group where many excellent acmers...

hdu3342(Legal or Not)----- 学习拓扑排序的好例题

经典拓扑排序 点击打开链接       Problem Description ACM-DIY is a large QQ group where many excellent acmers g...

hdu3342Legal or Not

1.题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=3342     2.思路:        这到题目简单是来说就是判断是否存在拓扑排序,也...

hdu-3342 Legal or Not

http://acm.hdu.edu.cn/showproblem.php?pid=3342

HDU3342 Legal or Not(拓扑排序)

Legal or Not Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) T...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:hdu 3342 Legal or Not
举报原因:
原因补充:

(最多只允许输入30个字)