Legal or Not HDU
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
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.
TO MAKE IT SIMPLE, we give every one a number (0, 1, 2,..., N-1). We use their numbers instead of their names.
If it is legal, output "YES", otherwise "NO".
0 1
1 2
2 2
0 1
1 0
0 0
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的更多相关文章
- Legal or Not HDU - 3342 (拓扑排序)
注意点: 输入数据中可能有重复,需要进行处理! #include <stdio.h> #include <iostream> #include <cstring> ...
- HDU 3342 Legal or Not(判断是否存在环)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3342 Legal or Not Time Limit: 2000/1000 MS (Java/Othe ...
- 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 ...
- HDU.3342 Legal or Not (拓扑排序 TopSort)
HDU.3342 Legal or Not (拓扑排序 TopSort) 题意分析 裸的拓扑排序 根据是否成环来判断是否合法 详解请移步 算法学习 拓扑排序(TopSort) 代码总览 #includ ...
- HDU——T 3342 Legal or Not
http://acm.hdu.edu.cn/showproblem.php?pid=3342 Time Limit: 2000/1000 MS (Java/Others) Memory Limi ...
- hdu 3342 Legal or Not(拓扑排序)
Legal or Not Time Limit : 2000/1000ms (Java/Other) Memory Limit : 32768/32768K (Java/Other) Total ...
- HDU 3342 Legal or Not(有向图判环 拓扑排序)
Legal or Not Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Tota ...
- HDU 3342:Legal or Not(拓扑排序)
Legal or Not Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Tot ...
- HDU 3342 Legal or Not(拓扑排序判断成环)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3342 题目大意:n个点,m条有向边,让你判断是否有环. 解题思路:裸题,用dfs版的拓扑排序直接套用即 ...
随机推荐
- 品味性能之道<九>:利用Loadrunner编写socket性能测试脚本简述
一.概述 Loadrunner拥有极为丰富的工具箱,供予我们制造出各种奇妙魔法的能力.其中就有此次要讨论的socket套接字操作. 二.socket概述 ...
- Java中创建对象的四种方法
第一种 使用new关键字 第二种 使用反射技术:1)通过Class类的newInstance()方法:2)通过Constructor类的newInstance方法 第三种 通过Object类的clon ...
- 八大排序算法的Java代码实现
简单插入排序 public class QuickSort { private static void quickSort(int [] a, int low, int high){ if (low ...
- Python之路(第七篇)Python作用域、匿名函数、函数式编程、map函数、filter函数、reduce函数
一.作用域 return 可以返回任意值例子 def test1(): print("test1") def test(): print("test") ret ...
- merge_节点
(1)CREATE可以创建相同节点,merge若节点已存在,则不会重新添加. CREATE (gp1:GoogleProfile1 {Id: 201401, Name:"Apple" ...
- 利用PHP脚本辅助MySQL数据库管理4-两个库表结构差异比较
<?php define('DATABASE1', 'coffeetest'); $dbi1 = new DbMysql; $dbi1->dbh = 'mysql://root:mysql ...
- R语言2版本3版本安装
./configure --prefix=/YZpath/public/software/R/R-3.5.0 --with-readline=no --with-x=no make make inst ...
- 实现WireCard支付
实现WireCard支付,暂未完成 WireCardController.cs using System; using System.Collections.Generic; using System ...
- word中括号中公式对齐
在写论文中使用到括号,但没有对齐,如: 但是我需要对齐,如: 此时只需要在每行需要对齐的地方输入‘&’即可(此符号在专业型括号是不可见的,在线性中可见,上图为专业型),同样也可以有多个对齐点, ...
- centos7 hive + 远程mysql 搭建笔记
1.require:java环境,本地可用的hadoop,远程可访问的mysql 2.拷贝hive文件(hive-2.2.1) 3.设置环境变量 export HIVE_HOME=/data/spar ...