bool dfs(int i,int pre) { visit[i]=true; ;j<=v;j++) if(g[i][j]) { if(!visit[j]) return dfs(j,i); else if(j!=pre) //如果访问过,且不是其父节点,那么就构成环 return false; } } 方法:从一个顶点出发深度优先遍历可遍历所有结点,并且没有环或只有n-1条边. 若判断有环:可以在遍历时记住父结点,v的子结点w已被访问,且不是结点v的父结点,则存在环. 若判断只有n-1条边,…
  利用_DFS_来判断无向图是否存在环的条件思路,我看一次_DFS_是否能访问到之前访问到的节点,如果能够访问到,就说明图存在环,那么关键问题就是判断是一次DFS?,追根到_DFS_算法的实现细节,发现我们设置_visited_数组时只有设置0和1两个状态,那么就可以改进以下之前的_DFS_算法,将_visited_各个状态表示成如下状态: 0: 没有被访问过 1: 刚刚访问,但是邻接点没有被全部访问完 2: 所有的邻接点都被访问完了,这里就可以判定_DFS_一定退出了   关键问题就解决了,…
题意:给你一个无向图,判断是否存在长度为K的环. 思路:dfs遍历以每一个点为起点是否存在长度为k的环.dfs(now,last,step)中的now表示当前点,last表示上一个访问的 点,step一个记录路径长度的计数器,s[i]记录从起点到i点的路径长度.如果某点被访问第二次,则说明出现环,判断当前路径长度和它第一次出现是的 长度差是否等于K即可. #include<cstdio> #include<cstring> using namespace std; ; bool e…
因为是连通图,所以从任意一点出发,一定可以通过一遍深度优先遍历就能走过所有的点和边,就可以利用这个性质来很容易的通过DFS判断图是否为连通图 下面是具体算法:…
Crazy Bobo Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 131072/65536 K (Java/Others) Total Submission(s): 1215    Accepted Submission(s): 366 Problem Description Bobo has a tree,whose vertices are conveniently labeled by 1,2,...,n.Each nod…
vjudge \(Description\) 给定一张\(n\)个点\(m\)条边的无向图,每个点有一个权值.求一条从\(1\)到\(n\)的路径,使得代价最小,输出最小代价. 一条路径的代价定义为,路径上所有点以及和这些点相邻的所有点的权值和. \(n\leq40,\ m\leq\frac{n(n-1)}{2}\). \(Solution\) 容易发现,如果选择从\(u\)走到\(v\),那么一定不会再回到\(u\)的其它相邻节点(不如直接走过去). 这样从点\(u\)爆搜的话,每次移动都会删…
G - Ancient Go Description Yu Zhou likes to play Go with Su Lu. From the historical research, we found that there are much difference on the rules between ancient go and modern go. Here is the rules for ancient go they were playing: The game is playe…
在图论中,连通图基于连通的概念.在一个无向图 G 中,若从顶点vi到顶点vj有路径相连(当然从vj到vi也一定有路径),则称vi和vj是连通的.如果 G 是有向图,那么连接vi和vj的路径中所有的边都必须同向.如果图中任意两点都是连通的,那么图被称作连通图.如果此图是有向图,则称为强连通图(注意:需要双向都有路径).图的连通性是图的基本性质.   严格定义(摘抄): 对一个图 G=(V,E) 中的两点 x 和 y ,若存在交替的顶点和边的序列 Γ=(x=v0-e1-v1-e2-...-ek-(v…
第一次出现超时 ac不了的题 思路一:对于每个节点用一次dfs dfs中 记录到当前的最长路径,若大于最长,则清除set,并加入当前节点 思路二:先查找只有一个相邻节点的节点进行dfs,由于可能存在闭环,对为访问的节点dfs 思路三:(TQL),大神思路,先以1节点为根用一次dfs(1),求出以1为根的最深点集合,并且完成深度搜索一次,可以知道是否还有不可达点, 如果还有没访问,继续遍历,可以的到连通分量数. 如果大于1,直接打印错误信息 否则,对最深点集合的其中一个进行dfs 即为答案. //…
题目链接: F - Auxiliary Set HDU - 5927 学习网址:https://blog.csdn.net/yiqzq/article/details/81952369题目大意一棵节点数为n的有根数,根节点为1,一开始所有的点都是重点,接下来有q次询问,每次询问把m个点变为轻点,问你树中还有多少个重点. 重点应该满足的条件为: 1.它本身是重点. 2.它为两个重点的最近公共祖先. 每次询问之后在下次询问前,所有的点都恢复为重点. 具体思路:对于每个点保存他的深度.因为每次输入的数…