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

题意分析

裸的拓扑排序 根据是否成环来判断是否合法

详解请移步

算法学习 拓扑排序(TopSort)

代码总览

#include <iostream>
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cstring>
#include <sstream>
#include <set>
#include <map>
#include <queue>
#include <stack>
#include <cmath>
#define nmax 200
#define MEM(x) memset(x,0,sizeof(x))
using namespace std;
int n,m;
int indegree[nmax];
vector<int> v[nmax];
bool suc = true;
void topsort()
{
int cnt = 0;
queue<int> q;
while(1){
for(int i = 0; i<n; ++i){
if(indegree[i] == 0){
q.push(i);
cnt++;
indegree[i] = -1;
}
}
if(q.empty()) break;
while(!q.empty()){
int t = q.front();q.pop();
for(int i = 0; i<v[t].size();++i){
int tt = v[t][i];
if(indegree[tt] == -1){
suc =false;
break;
}else
indegree[tt]--;
}
if(!suc) break;
}
if(!suc) break;
}
if(suc && cnt!=n) suc = false;
}
int main()
{
//freopen("in.txt","r",stdin);
while(scanf("%d%d",&n,&m) == 2 && n){
MEM(indegree);
suc = true;
for(int i = 0; i<n;++i) v[i].clear();
for(int i = 0; i<m; ++i){
int a,b;
scanf("%d%d",&a,&b);
indegree[b]++;
v[a].push_back(b);
}
topsort();
printf("%s\n",suc?"YES":"NO");
}
return 0;
}

最新文章

  1. Devexress XPO xpPageSelector 使用
  2. 什么是java path环境变量
  3. 16.检查是否为BST
  4. HDU5900
  5. MySQL &#183; 性能优化 &#183; 条件下推到物化表
  6. angular 自定义指令 link
  7. Redis 一:安装篇
  8. Invalid embedded descriptor for &quot;.proto&quot;.Dependencies passed (Protobufer)解决办法
  9. html网页特殊符号代码
  10. Java Des加解密方法(c#加密Java解密)
  11. Unix代码段和数据段
  12. 微信企业付款获取RSA
  13. Spring Boot – 自定义PropertyEditor
  14. C#中as运算符
  15. Confluence 6 你模板中可用的对象
  16. 磁盘修改AF
  17. wriesharek同时监听多个端口
  18. 19/03/30Python笔记
  19. 函数式编程编程即高阶函数+monad
  20. Centos 创建 docker项目

热门文章

  1. WPF Issues
  2. Windows运行机理——主程序—WinMain
  3. Qt-QML-Button-ButtonStyle-实现鼠标滑过点击效果
  4. docker官网安装
  5. (C#)原型模式—深复制与浅复制
  6. 查找当前对象中的方法对象的属性叫做_event_name的方法
  7. SpringCloud IDEA 教学 (一) Eureka的简介与服务注册中心的建立
  8. angularJS遇到的坑
  9. 定点数(fixed-point number)
  10. 自测之Lesson4:gdb