zstu.4191: 无向图找环(dfs树 + 邻接表)
4191: 无向图找环
Time Limit: 5 Sec Memory Limit: 128 MB Submit: 117 Solved: 34
Description
给你一副无向图,每条边有边权,保证图联通,现在让你判断这个图是否有异或值大于零的环存在。
Input
多组测试数据,每组先输入两个数n m,表示图的点跟边的数量。
然后是m行,每行三个数a b c。代表一条边的起点,终点,边权。
1 <= n<= 100000, 1 <= m <= 200000.
1 <= a <= n, 1 <= b <= n, a != b.
0 <= c <= 32767
Output
对于每组数据输出Yes或者 No。
Sample Input
3 3
1 2 0
2 3 1
3 1 1
Sample Output
No
HINT
Source
#include<cstdio>
#include<map>
using namespace std;
const int N = + , M = + ;
struct edge
{
int u , v , nxt ;
int w ;
}e[M * ];
int head[M * ] , E = ;
bool vis [N] ;
int sumxor[N] ;
int n , m ;
int u , v , w ;
bool flag ; void add (int u , int v , int w)
{
e[E].u = u , e[E].v = v , e[E].w = w , e[E].nxt = head[u] ;
head[u] = E ++ ;
e[E].u = v , e[E].v = u , e[E].w = w , e[E].nxt = head[v] ;
head[v] = E ++ ;
} void dfs (int u)
{
for (int i = head[u] ; i != - ; i = e[i].nxt) {
if (! vis[e[i].v]) {
vis[e[i].v] = ;
sumxor[e[i].v] = sumxor[u] ^ e[i].w ;
dfs (e[i].v) ;
}
else {
if ( (sumxor[e[i].v] ^ sumxor[u] ^ e[i].w) ) {
flag = ;
return ;
}
}
}
} int main ()
{
//freopen ("a.txt" , "r" , stdin ) ;
while (~ scanf ("%d%d" , &n , &m) ) {
E = ;
flag = ;
fill (head , head + n + , - ) ;
while (m --) {
scanf ("%d%d%d" , &u , &v , &w) ;
add (u , v , w) ;
}
fill (vis , vis + n + , ) ;
vis[] = ;
sumxor[] = ;
dfs () ;
printf ("%s\n" , flag ? "Yes" : "No" ) ;
}
return ;
}
dfs树:
只要在ADG中进行广搜,只要有祖先和对应节点这种关系,那么他们就能构成环;反之若 任意 一对节点不符合这个原则,就不能构成环。(简单来说你能搜到就能成环)
此外nxt 存放的是 “边”。
因为用dfs找点只需 n 次 , 而用了邻接表找边 只需 m 次。
又因为如果两个小环的异或值!= 0 , 那么所形成的的大环的异或值肯定 != 0 ;
所以总的复杂度为O(n + m)。
zstu.4191: 无向图找环(dfs树 + 邻接表)的更多相关文章
- ZSTU OJ 3999 零基础学算法---邻接表
题目:Click here 题意:我就喜欢中文题! 分析:这个题虽然是中文题,但是还是有一点费解的.其实就是给你一棵树,是用图的形式给你的,只知道a,b之间有一条边,并不知道谁是父,谁是子.思路就是先 ...
- hdu 6041 I Curse Myself 无向图找环+优先队列
I Curse Myself Time Limit: 8000/4000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Others) ...
- dfs树
dfs树是解决图中带环的利器. 前天CF的F题就是dfs树,但是当时我没有认真思考 觉着找到一个环过于困难 当时没有想到 也没理解dfs树的意义. 对于一张无向图求出一个dfs树 这个树有两种边 树边 ...
- hdu 4707 Pet(DFS && 邻接表)
Pet Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submis ...
- 邻接表无向图(三)之 Java详解
前面分别介绍了邻接表无向图的C和C++实现,本文通过Java实现邻接表无向图. 目录 1. 邻接表无向图的介绍 2. 邻接表无向图的代码说明 3. 邻接表无向图的完整源码 转载请注明出处:http:/ ...
- 邻接表无向图(二)之 C++详解
本章是通过C++实现邻接表无向图. 目录 1. 邻接表无向图的介绍 2. 邻接表无向图的代码说明 3. 邻接表无向图的完整源码 转载请注明出处:http://www.cnblogs.com/skywa ...
- 邻接表无向图(一)之 C语言详解
本章介绍邻接表无向图.在"图的理论基础"中已经对图进行了理论介绍,这里就不再对图的概念进行重复说明了.和以往一样,本文会先给出C语言的实现:后续再分别给出C++和Java版本的实现 ...
- CodeForces - 103B(思维+dfs找环)
题意 https://vjudge.net/problem/CodeForces-103B 很久很久以前的一天,一位美男子来到海边,海上狂风大作.美男子希望在海中找到美人鱼 ,但是很不幸他只找到了章鱼 ...
- 与图论的邂逅06:dfs找环
当我在准备做基环树的题时,经常有了正解的思路确发现不会找环,,,,,,因为我实在太蒻了. 所以我准备梳理一下找环的方法: 有向图 先维护一个栈,把遍历到的节点一个个地入栈.当我们从一个节点x回溯时无非 ...
随机推荐
- 第四章 一切从IL开始
从这一部分开始,就开始讲.net的本质了,这第四章就是讲有关IL(中间语言)的内容,主要利用工具,看看VS到底编译出来的是什么东西,从中我们可以看到实现的方式和过程.有助于我们更好的了解.net的本质 ...
- JavaScript基础---Cookie
内容提纲: 1.cookie 2.cookie局限性 3.其他存储 发文不易,转载请注明出处链接,谢谢! 随着Web越来越复杂,开发者急切的需要能够本地化存储的脚本功能.这个时候,第一个出现的方案:c ...
- HTML5——行走日记
效果展示: 代码如下: <!DOCTYPE HTML PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http:/ ...
- 随堂练习——Rational rose
管理员 学生
- java.lang.IllegalStateException: getWriter() has already been called for this response问题解决
java.lang.IllegalStateException: getWriter() has already been called for this response问题解决 java.lang ...
- C/C++语言算法题——替换
[问题] Description 给定一个有限长度的非负整数序列.一次操作是指从第一个元素开始,依次把数列中的每个数替换为它右边比它小的数的个数.对该数列不断进行这个操作.总有一个时刻该数列将不再发生 ...
- 使用quartz 定时任务
Quartz 是一个开源的作业调度框架,它完全由 Java 写成,并设计用于 J2SE 和 J2EE 应用中.它提供了巨大的灵活性而不牺牲简单性.你能够用它来为执行一个作业而创建简单的或复杂的调度. ...
- selenium常见的疑问和问题
.确认(verifation)和断言(assert)有什么区别? 确认:当测试中的一个用例存在错误时,系统将会继续运行这些测试 断言:当测试中的一个用例存在错误时,系统将会退出当前用例 总而言之 ...
- 基于spring mvc的注解DEMO完整例子
弃用了struts,用spring mvc框架做了几个项目,感觉都不错,而且使用了注解方式,可以省掉一大堆配置文件.本文主要介绍使用注解方式配置的spring mvc,之前写的spring3.0 mv ...
- @RestController注解下返回到jsp视图页面(转)(转)
这个问题我也遇到过,下面的方法可以试试 蓝萝卜blu @RestController注解下返回到jsp视图页面 spring4.1中添加了@RestController注解很方便,集成了@Respon ...