HDU3342 Legal or Not 【拓扑排序】

Legal or Not

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)

Total Submission(s): 4288    Accepted Submission(s): 1903

Problem Description

ACM-DIY is a large QQ group where many excellent acmers get together. It is so harmonious that just like a big family. Every day,many "holy cows" like HH, hh, AC, ZT, lcc, BF, Qinz and so on chat on-line to exchange their ideas. When
someone has questions, many warm-hearted cows like Lost will come to help. Then the one being helped will call Lost "master", and Lost will have a nice "prentice". By and by, there are many pairs of "master and prentice". But then problem occurs: there are
too many masters and too many prentices, how can we know whether it is legal or not?

We all know a master can have many prentices and a prentice may have a lot of masters too, it‘s legal. Nevertheless,some cows are not so honest, they hold illegal relationship. Take HH and 3xian for instant, HH is 3xian‘s master and, at the same time, 3xian
is HH‘s master,which is quite illegal! To avoid this,please help us to judge whether their relationship is legal or not.

Please note that the "master and prentice" relation is transitive. It means that if A is B‘s master ans B is C‘s master, then A is C‘s master.

Input

The input consists of several test cases. For each case, the first line contains two integers, N (members to be tested) and M (relationships to be tested)(2 <= N, M <= 100). Then M lines follow, each contains a pair of (x, y) which
means x is y‘s master and y is x‘s prentice. The input is terminated by N = 0.

TO MAKE IT SIMPLE, we give every one a number (0, 1, 2,..., N-1). We use their numbers instead of their names.

Output

For each test case, print in one line the judgement of the messy relationship.

If it is legal, output "YES", otherwise "NO".

Sample Input

3 2
0 1
1 2
2 2
0 1
1 0
0 0

Sample Output

YES
NO

题意:这题就是给定有向图,判断其是否含环。

题解:直接求拓扑序列中元素的个数是否和总元素个数相等。

#include <stdio.h>
#include <string.h>
#define maxn 102

int queue[maxn], indegree[maxn];
bool map[maxn][maxn];

bool topoSort(int n)
{
    int front = 0, back = 0, i, u;
    for(i = 0; i < n; ++i)
        if(!indegree[i]) queue[back++] = i;
    while(front != back){
        u = queue[front++];
        for(i = 0; i < n; ++i)
            if(map[u][i] && !--indegree[i]) queue[back++] = i;
    }
    return back == n;
}

int main()
{
    int n, m, a, b;
    while(scanf("%d%d", &n, &m), n){
        memset(indegree, 0, sizeof(indegree));
        memset(map, 0, sizeof(map));
        while(m--){
            scanf("%d%d", &a, &b);
            if(!map[a][b]){
                map[a][b] = 1;
                ++indegree[b];
            }
        }
        if(topoSort(n))printf("YES\n");
        else printf("NO\n");
    }
    return 0;
}

HDU3342 Legal or Not 【拓扑排序】

时间: 2024-11-06 12:50:22

HDU3342 Legal or Not 【拓扑排序】的相关文章

hdu 3342 Legal or Not - 拓扑排序

ACM-DIY is a large QQ group where many excellent acmers get together. It is so harmonious that just like a big family. Every day,many "holy cows" like HH, hh, AC, ZT, lcc, BF, Qinz and so on chat on-line to exchange their ideas. When someone has

Legal or Not(拓扑排序判环)

http://acm.hdu.edu.cn/showproblem.php?pid=3342 Legal or Not Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 5788    Accepted Submission(s): 2678 Problem Description ACM-DIY is a large QQ group w

hdu 3342 Legal or Not 拓扑排序判断环。 现在的我,除了刷水题,,还能干什么

Legal or Not Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 4960    Accepted Submission(s): 2270 Problem Description ACM-DIY is a large QQ group where many excellent acmers get together. It is

HDU3342 Legal or Not【拓扑排序】【链式前向星】

Legal or Not Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 4633    Accepted Submission(s): 2115 Problem Description ACM-DIY is a large QQ group where many excellent acmers get together. It is

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

经典拓扑排序 点击打开链接 Problem Description ACM-DIY is a large QQ group where many excellent acmers get together. It is so harmonious that just like a big family. Every day,many "holy cows" like HH, hh, AC, ZT, lcc, BF, Qinz and so on chat on-line to exch

HDU3342有向图判圈DFS&amp;&amp;拓扑排序法

HDU3342 Legal or Not 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3342 题目意思:一群大牛互相问问题,大牛有不会的,会被更厉害的大牛解答,更厉害的大牛是会的东西比大牛多,但是有的时候更厉害的大牛会装弱,出来问问题,这样就被大牛解答了.这样就形成了一个圈.题目的意思就是让你在一个有向图里面判断是否存在环.我们可以通过dfs和拓扑排序两种方法. DFS的代码: //Author: xiaowuga #include <bits

HDU 3342 Legal or Not (最短路 拓扑排序?)

Legal or Not Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 6580    Accepted Submission(s): 3088 Problem Description ACM-DIY is a large QQ group where many excellent acmers get together. It is

HDU 1258 确定比赛名次 &amp;&amp;HDU 3342 Legal or Not 【临接表+拓扑排序】

HDU 1258 链接:click here HDU 3342 链接:click here 题意: 确定比赛名次 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 14142    Accepted Submission(s): 5667 Problem Description 有N个比赛队(1<=N<=500),编号依次为1,2,3,

HDOJ 3342 Legal or Not 【拓扑排序】

题意:判断是否成环. 策略:如题. 这道题就是简单的拓扑排序题,但是要注意一点要去重复的数据.我用了两种结构体:链式前向星和邻接矩阵. 代码1:(用链式前向星)(不用增加去重) #include<stdio.h> #include<string.h> #include<queue> #define INF 0x3f3f3f3f #define MAXN 105 struct EdgeNode{ int to; int next; }edges[MAXN]; int he