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

Wuyiqi

 #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树 + 邻接表)的更多相关文章

  1. ZSTU OJ 3999 零基础学算法---邻接表

    题目:Click here 题意:我就喜欢中文题! 分析:这个题虽然是中文题,但是还是有一点费解的.其实就是给你一棵树,是用图的形式给你的,只知道a,b之间有一条边,并不知道谁是父,谁是子.思路就是先 ...

  2. hdu 6041 I Curse Myself 无向图找环+优先队列

    I Curse Myself Time Limit: 8000/4000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others) ...

  3. dfs树

    dfs树是解决图中带环的利器. 前天CF的F题就是dfs树,但是当时我没有认真思考 觉着找到一个环过于困难 当时没有想到 也没理解dfs树的意义. 对于一张无向图求出一个dfs树 这个树有两种边 树边 ...

  4. hdu 4707 Pet(DFS &amp;&amp; 邻接表)

    Pet Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submis ...

  5. 邻接表无向图(三)之 Java详解

    前面分别介绍了邻接表无向图的C和C++实现,本文通过Java实现邻接表无向图. 目录 1. 邻接表无向图的介绍 2. 邻接表无向图的代码说明 3. 邻接表无向图的完整源码 转载请注明出处:http:/ ...

  6. 邻接表无向图(二)之 C++详解

    本章是通过C++实现邻接表无向图. 目录 1. 邻接表无向图的介绍 2. 邻接表无向图的代码说明 3. 邻接表无向图的完整源码 转载请注明出处:http://www.cnblogs.com/skywa ...

  7. 邻接表无向图(一)之 C语言详解

    本章介绍邻接表无向图.在"图的理论基础"中已经对图进行了理论介绍,这里就不再对图的概念进行重复说明了.和以往一样,本文会先给出C语言的实现:后续再分别给出C++和Java版本的实现 ...

  8. CodeForces - 103B(思维+dfs找环)

    题意 https://vjudge.net/problem/CodeForces-103B 很久很久以前的一天,一位美男子来到海边,海上狂风大作.美男子希望在海中找到美人鱼 ,但是很不幸他只找到了章鱼 ...

  9. 与图论的邂逅06:dfs找环

    当我在准备做基环树的题时,经常有了正解的思路确发现不会找环,,,,,,因为我实在太蒻了. 所以我准备梳理一下找环的方法: 有向图 先维护一个栈,把遍历到的节点一个个地入栈.当我们从一个节点x回溯时无非 ...

随机推荐

  1. PRML读书会第三章 Linear Models for Regression(线性基函数模型、正则化方法、贝叶斯线性回归等)

    主讲人 planktonli planktonli(1027753147) 18:58:12  大家好,我负责给大家讲讲 PRML的第3讲 linear regression的内容,请大家多多指教,群 ...

  2. 小白安装linux(虚拟机)red hat enterprise linux 6

    额,这篇貌似是我名义上的第一篇博客,但是我好像没有第一写他,没事,都一样.(我会假装它是人生中第一篇博客的) 上大学之后,很久之后才发现自己听喜欢linux的,因为感觉很高大上,所以自己自学了很多关于 ...

  3. ASP.NET 系列:RBAC权限设计

    权限系统的组成通常包括RBAC模型.权限验证.权限管理以及界面访问控制.现有的一些权限系统分析通常存在以下问题: (1)没有权限的设计思路 认为所有系统都可以使用一套基于Table设计的权限系统.事实 ...

  4. [C#]Hosting Process (vshost.exe)

    写在前面 最近在群里,有朋友问起这个vshost.exe进程到底是什么?当时确实不知道是个什么东东,给人的感觉是,经常看到它,就是在启动一个项目的时候,经常看到它,就是没细研究它是啥玩意儿.既然遇到了 ...

  5. Java版本-----商店购物系统

    buy.java public class Buy { public static void main(String[] args) { // TODO Auto-generated method s ...

  6. Xamarin.Forms入门学习路线

    Xamarin 介绍 Xamarin是一套跨平台解决方案,目的是使用C#语言创造原生的iOS,Android,Mac和Windows应用. Xamarin的三个优势: Xamarin App拥有原生A ...

  7. zabbix 的学习应用之路

    1.zabbix  server的安装      http://www.cnblogs.com/smail-bao/p/5643136.html 2.zabbix  agent的安装        h ...

  8. 缓存插件 EHCache 对象缓存(Spring)

    对象缓存就是将查询的数据,添加到缓存中,下次再次查询的时候直接从缓存中获取,而不去数据库中查询. 对象缓存一般是针对方法.类而来的,结合Spring的Aop对象.方法缓存就很简单.这里需要用到切面编程 ...

  9. 【codevs1014/1068】背包型动态规划

    分析: 状态转移方程: v[j]=max(v[j],v[j-a[i]]+a[i]) (j ← tol downto a[i]) /* 作者:flipped 题目:p1014 装箱问题 */ #incl ...

  10. Oracle 11g 默认用户名和密码

    安装ORACLE时,若没有为下列用户重设密码,则其默认密码如下: 用户名 / 密码                      登录身份                              说明 ...