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版的拓扑排序直接套用即 ...
随机推荐
- iOS.KVC.setValue:forKey:
Foundation Framework 定义了 NSObject(NSKeyValueCoding), - (void)setValue:(id)value forKey:(NSString *)k ...
- maven 单元测试 ( http://www.cnblogs.com/qinpengming/p/5225380.html )
对junit单元测试的报告:类似这样的结果 ------------------------------------------------------- T E S T S ----------- ...
- qRT-PCR 注意事项
师姐呕心沥血整理的 qRT-PCR 注意事项 关键词: qRT-PCR 注意事项2017-07-17 10:17 来源:生物学霸 点击次数:1257 大家都在说 qRT-PCR 实验原理.引物设计.结 ...
- vs2010打开qt的.pro文件时错误解决办法
注意:qt creator工程中一般都已经存在*.pro文件,里面存放着一些自己配置的包含头文件和lib库文的信息,最好不要再重新使用qmake -project生成,若重新生成,则可能要重新增加配置 ...
- Python generator 的yield (enumerate)
生成杨辉三角 1 1 1 1 2 1 1 3 3 1 1 4 6 4 1 1 5 10 10 5 1 def triangles(max): L = [1,] while len(L) - 1 < ...
- [Groovy] 创建Excel,追加Excel
package ScriptLibrary import java.awt.Color import java.awt.GraphicsConfiguration.DefaultBufferCapab ...
- connect: Address is invalid on local machine or port is not valid on remote
idea 运行正常打成jar包运行提示“connect: Address is invalid on local machine or port is not valid on remote” , 解 ...
- sql server profiler 工具使用 sql 语句性能分析
https://www.cnblogs.com/knowledgesea/p/3683505.html
- Sophus libSophus.so
在编译包含Sophus的源文件的时候,出现如下错误 ../lib/libmyslam.so: undefined reference to `Sophus::SO3::SO3(double, doub ...
- LCA(最近公共祖先)模板
Tarjan版本 /* gyt Live up to every day */ #pragma comment(linker,"/STACK:1024000000,1024000000&qu ...