Legal or Not

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 3060    Accepted Submission(s): 1386

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> const int MAX = 100 + 10;
int n,m,G[MAX][MAX],c[MAX];
bool DFS(int u)
{
c[u] = -1;
for(int v = 0;v < n;v++)if(G[u][v])
{
if(c[v]<0) return false;
if(!c[v]&&!DFS(v)) return false;
}
c[u] = 1;
return true;
}
bool TopSort()
{
memset(c,0,sizeof(c));
for(int v = 0;v < n;v++)if(!c[v])
if(!DFS(v)) return false;
return true;
}
int main()
{
while(scanf("%d%d",&n,&m),n)
{
int x,y;
memset(G,0,sizeof(G));
for(int i = 0;i < m;i++)
{
scanf("%d%d",&x,&y);
G[x][y] = 1;
}
if(TopSort())
printf("YES\n");
else
printf("NO\n");
}
return 0;
}

复杂版(邻接表)

#include <iostream>
#include <cstdlib>
#include <queue>
using namespace std; const int MaxVertexNum = 100;
typedef int VertexType;
typedef struct node
{
int adjvex;
node* next;
}EdgeNode;
typedef struct
{
VertexType vertex;
EdgeNode* firstedge;
int count;
}VertexNode;
typedef VertexNode AdjList[MaxVertexNum];
typedef struct
{
AdjList adjlist;
int n,e;
}ALGraph;
bool CreatALGraph(ALGraph *G)
{
int i,j,k;
EdgeNode* s;
cin>>G->n>>G->e;
if(G->n == 0)
return false;
for(i = 0;i < G->n;i++)
{
G->adjlist[i].vertex = i;
G->adjlist[i].firstedge = NULL;
}
for(k = 0;k < G->e;k++)
{
cin>>i>>j;
s = (EdgeNode *)malloc(sizeof(EdgeNode));
s->adjvex = j;
s->next = G->adjlist[i].firstedge;
G->adjlist[i].firstedge = s;
}
return true;
} void TopSort(ALGraph *G)
{
EdgeNode *p;
queue<int> Q;
int i,j,cnt = 0;
for(i = 0;i < G->n;i++)
G->adjlist[i].count = 0;
for(i = 0;i < G->n;i++)
{
p = G->adjlist[i].firstedge;
while(p != NULL)
{
G->adjlist[p->adjvex].count++;
p = p->next;
}
}
for(i = 0;i < G->n;i++)
if(G->adjlist[i].count == 0)
Q.push(i);
while(!Q.empty())
{
i = Q.front();
Q.pop();
cnt++;
p = G->adjlist[i].firstedge;
while(p != NULL)
{
j = p->adjvex;
G->adjlist[j].count--;
if(G->adjlist[j].count == 0)
Q.push(j);
p = p->next;
}
}
if(cnt != G->n)
cout<<"NO"<<endl;
else
cout<<"YES"<<endl;
} int main()
{
ALGraph G;
while(CreatALGraph(&G))
TopSort(&G);
return 0;
}

Legal or Not HDU的更多相关文章

  1. Legal or Not HDU - 3342 (拓扑排序)

     注意点: 输入数据中可能有重复,需要进行处理! #include <stdio.h> #include <iostream> #include <cstring> ...

  2. HDU 3342 Legal or Not(判断是否存在环)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3342 Legal or Not Time Limit: 2000/1000 MS (Java/Othe ...

  3. hdu 3342 Legal or Not

    题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=3342 Legal or Not Description ACM-DIY is a large QQ g ...

  4. HDU.3342 Legal or Not (拓扑排序 TopSort)

    HDU.3342 Legal or Not (拓扑排序 TopSort) 题意分析 裸的拓扑排序 根据是否成环来判断是否合法 详解请移步 算法学习 拓扑排序(TopSort) 代码总览 #includ ...

  5. HDU——T 3342 Legal or Not

    http://acm.hdu.edu.cn/showproblem.php?pid=3342 Time Limit: 2000/1000 MS (Java/Others)    Memory Limi ...

  6. hdu 3342 Legal or Not(拓扑排序)

    Legal or Not Time Limit : 2000/1000ms (Java/Other)   Memory Limit : 32768/32768K (Java/Other) Total ...

  7. HDU 3342 Legal or Not(有向图判环 拓扑排序)

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

  8. HDU 3342:Legal or Not(拓扑排序)

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

  9. HDU 3342 Legal or Not(拓扑排序判断成环)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3342 题目大意:n个点,m条有向边,让你判断是否有环. 解题思路:裸题,用dfs版的拓扑排序直接套用即 ...

随机推荐

  1. BZOJ 1874 取石子游戏 - SG函数

    Description $N$堆石子, $M$种取石子的方式, 最后取石子的人赢, 问先手是否必胜 $A_i <= 1000$,$ B_i <= 10$ Solution 由于数据很小, ...

  2. LibreOJ 6004. 「网络流 24 题」圆桌聚餐 网络流版子题

    #6004. 「网络流 24 题」圆桌聚餐 内存限制:256 MiB时间限制:5000 ms标准输入输出 题目类型:传统评测方式:Special Judge 上传者: 匿名 提交提交记录统计讨论测试数 ...

  3. tiny cc 编译器,tinycc,变种

    去掉了 -run 参数 下载代码和编译好的程序

  4. JSP属性的四种保存范围(page request session application)

    JSP提供了四种属性的保存范围,分别为page.request.session.application 其对应的类型分别为:PageContext.ServletRequest.HttpSession ...

  5. Unix和Windows文件格式转化

    可能的原因有: 1)执行权限的问题 解决方法: chmod +x ***.py 2)python版本的问题 解决方法:在执行时或者在py文件中选择好对应的Python的版本 3)python文件格式的 ...

  6. Aspose.Words给word文档加水印

    需求:在一些重要的Word文档需要打印时,添加水印以明出处. 方案:使用Aspose组件给word文档 代码:干货如下 /// <summary> /// Inserts a waterm ...

  7. Spring整合jedis 集群模式

    引入jedis依赖 <dependency> <groupId>redis.clients</groupId> <artifactId>jedis< ...

  8. Android NDK定位.so文件crash代码位置

    参考:http://blog.csdn.net/xyang81/article/details/42319789 问题:      QRD8926_110202平台的Browser必现报错.(去年的项 ...

  9. Python导入自定义类时显示错误:attempted relative import beyond top-level package

    显示这个错误可能有两个原因: 1.文件夹中没有包含__init__.py文件,该文件可以为空,但必须存在该文件. 2.把该文件当成主函数入口,该文件所在文件夹不能被解释器视作package,所以可能导 ...

  10. Office 365 API Tools预览版已提供下载

    Office 365 API Tools预览版地址:http://visualstudiogallery.msdn.microsoft.com/7e947621-ef93-4de7-93d3-d796 ...