拓扑排序bfs_dfs
dfs
#include <cstdio>
#include <cstring>
using namespace std; const int maxn = 1e5+;
struct Edge{
int lst;
int to;
}edge[maxn*];
int head[maxn]; int qsz; inline void add(int u, int v) {
edge[qsz].lst = head[u];
edge[qsz].to = v;
head[u] = qsz++;
} int vis[maxn];
int ans[maxn];
int qtot;
bool dfs(int u) {
int v, i;
vis[u] = -;
for (i=head[u]; i; i=edge[i].lst) {
v = edge[i].to;
if (vis[v] == -) return false;
else if (!vis[v] && !dfs(v)) return false;
}
ans[qtot--] = u;
vis[u] = ;
return true;
} int main()
{
int t, n, m, i, j, u, v;
scanf("%d", &t);
while (t--) {
// init;
qsz = ;
memset(head, , sizeof(head));
memset( vis, , sizeof( vis));
scanf("%d%d", &n, &m);
qtot = n;
for (i=; i<=m; ++i) {
scanf("%d%d", &u, &v);
add(v, u);
}
for (i=; i<=n; ++i)
if (!vis[i])
if (!dfs(i))
break; if (!qtot) printf("Correct\n");
else printf("Wrong\n");
} return ;
}
bfs
#include <cstdio>
#include <cstring>
using namespace std; const int maxn = 1e5+;
struct Edge{
int lst;
int to;
}edge[maxn*];
int head[maxn];
int qsz; int inq[maxn];
int q[maxn];
int qhead;
inline void add(int u, int v) {
edge[qsz].lst = head[u];
edge[qsz].to = v;
head[u] = qsz++;
} int main()
{
int t, n, m, i, j, u, v;
scanf("%d", &t);
while (t--) {
// init;
qsz = ;
memset(head, , sizeof(head));
memset(inq, , sizeof( inq));
qhead = ; scanf("%d%d", &n, &m);
for (i=; i<=m; ++i) {
scanf("%d%d", &u, &v);
add(u, v);
inq[v]++;
}
for (i=; i<=n; ++i)
if (!inq[i])
q[qhead++] = i;
for (i=; i<qhead; ++i) {
for (j=head[q[i]]; j; j=edge[j].lst) {
v = edge[j].to;
inq[v]--;
if (!inq[v]) q[qhead++] = v;
}
}
if (qhead == n) printf("Correct\n");
else printf("Wrong\n");
} return ;
}
拓扑排序bfs_dfs的更多相关文章
- 算法与数据结构(七) AOV网的拓扑排序
今天博客的内容依然与图有关,今天博客的主题是关于拓扑排序的.拓扑排序是基于AOV网的,关于AOV网的概念,我想引用下方这句话来介绍: AOV网:在现代化管理中,人们常用有向图来描述和分析一项工程的计划 ...
- 有向无环图的应用—AOV网 和 拓扑排序
有向无环图:无环的有向图,简称 DAG (Directed Acycline Graph) 图. 一个有向图的生成树是一个有向树,一个非连通有向图的若干强连通分量生成若干有向树,这些有向数形成生成森林 ...
- 【BZOJ-2938】病毒 Trie图 + 拓扑排序
2938: [Poi2000]病毒 Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 609 Solved: 318[Submit][Status][Di ...
- BZOJ1565 [NOI2009]植物大战僵尸(拓扑排序 + 最大权闭合子图)
题目 Source http://www.lydsy.com/JudgeOnline/problem.php?id=1565 Description Input Output 仅包含一个整数,表示可以 ...
- 图——拓扑排序(uva10305)
John has n tasks to do. Unfortunately, the tasks are not independent and the execution of one task i ...
- Java排序算法——拓扑排序
package graph; import java.util.LinkedList; import java.util.Queue; import thinkinjava.net.mindview. ...
- poj 3687(拓扑排序)
http://poj.org/problem?id=3687 题意:有一些球他们都有各自的重量,而且每个球的重量都不相同,现在,要给这些球贴标签.如果这些球没有限定条件说是哪个比哪个轻的话,那么默认的 ...
- 拓扑排序 - 并查集 - Rank of Tetris
Description 自从Lele开发了Rating系统,他的Tetris事业更是如虎添翼,不久他遍把这个游戏推向了全球. 为了更好的符合那些爱好者的喜好,Lele又想了一个新点子:他将制作一个全球 ...
- *HDU1285 拓扑排序
确定比赛名次 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Subm ...
随机推荐
- NPOI解决由于excel删除数据导致空行读取问题
1.解决问题思路一:申明判断是否空行变量用于判断是否空行,声明变量数组用于临时非空行数据,最后存于datatable中. /// <summary>读取excel, /// 默认第一行为表 ...
- Always clear download 下载 谷歌浏览器插件
由于该博文不支持上传压缩包,因此,如有需要always clear download插件的可点击此链接在百度网盘上下载https://pan.baidu.com/s/13wWchis3iKqXkIA5 ...
- 腾讯云centos7.2安装jdk1.7 tomcat7.0部署项目示例
说实话win server的性能并不好,所以程序员必须会在Linux上安装环境,部署项目. 第一步,官网下载tomcat和jdk压缩文件*.tar.gz 下载路径如下: jdk:http://www ...
- 缓存算法(FIFO 、LRU、LFU三种算法的区别)
FIFO算法 FIFO 算法是一种比较容易实现的算法.它的思想是先进先出(FIFO,队列),这是最简单.最公平的一种思想,即如果一个数据是最先进入的,那么可以认为在将来它被访问的可能性很小.空间满的时 ...
- angular-cli.json配置参数解释,以及依稀常用命令的通用关键参数解释
一. angular-cli.json常见配置 { "project": { "name": "ng-admin", //项目名称 &quo ...
- HDU 6186 CS Course(前缀+后缀)
http://acm.hdu.edu.cn/showproblem.php?pid=6186 题意:给出n个数,共有n次询问,每次询问给出一个数p,求除去第p个数后的n-1个数的&.|.^值. ...
- Linux 软连接 (ln命令)
这是linux中一个非常重要命令.它的功能是为某一个文件在另外一个位置建立一个同不的链接,这个命令最常用的参数是-s,具体用法是:ln -s 源文件 目标文件. 当我们需要在不同的目录,用到相同的文件 ...
- sublime text 3 显示空格和Tab
tab对于需要 共享 的代码而言是灾难. pyhton对这点的明确要求是不要混合使用4个空格和tab键. 只使用二者之一,都是没有问题的.如果一个python代码已经完成的部分,都是使用的4个空格.那 ...
- Character流与Byte流的区别(转)
Character流与Byte流的区别是 A) 每次读入的字节数不同 B) 前者带有缓冲,后者没有C) 前者是字符读写,后者是字节读写 D) 二者没有区别,可以互换使用 Java的流操作分为字节流和字 ...
- collections.deque
d = collections.deque([]) # 创建双端队列d.append('a') # 在最右边添加一个元素,此时 d=deque('a')d.appendleft('b') # 在最左 ...