POJ 3895
题意:
求最大环的边数,给出一个无向图,图中每条边的长度都是1,求图中最长环的长度是多少?
样例:
Sample Input
1 -------->这里是测试次数
7 8 ----------------->七个点,八条边
3 4 ---------------->顶点3到4有一条边
1 4
1 3
7 1
2 7
7 5
5 6
6 2
Sample Output
4
AC代码:
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Scanner;
import java.util.List;
public class Main {
private int n;//顶点个数
private boolean[] used;//节点状态,值为false的是未访问的
private List< ArrayList< Integer>> G;//邻接表
private int maxlen=0;//最大环的长度
private int[] num;//记录搜索到某顶点时已搜索过的顶点数
public Main(int n,List< ArrayList< Integer>> G){
this.n=n;
this.G=G;
used=new boolean[n+1];
num=new int[n+1];
}
private void dfs(int v, int t) {
num[v] = t; //搜索到v时,已搜索过的顶点数
used[v] = true;
int x = G.get(v).size();
for(int i = 0; i < x; i++){ //对V的每一个邻接点
if(!used[G.get(v).get(i)]){ //没有发现环
dfs(G.get(v).get(i), t + 1);
}
else //发现环,更新最大环的边数
{
if(maxlen < num[v] - num[G.get(v).get(i)] + 1)
maxlen = num[v] - num[G.get(v).get(i)] + 1;
}
}
}
public void go(){
for(int i = 1; i <= n; i++){ //遍历每一个顶点
if(!used[i])
dfs(i, 1); //深度优先搜索
}
if(maxlen > 2) System.out.printf("%d\n", maxlen);
else System.out.println("0");
}
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int t=sc.nextInt();
while(t-->0){
int n=sc.nextInt();
int m=sc.nextInt();
List< ArrayList< Integer>> G;
G = new ArrayList< ArrayList< Integer>>();//初始化邻接表
for(int i = 1;i<=n+1;i++)
G.add(new ArrayList< Integer>());
for(int i=0;i<m;i++){
int u = sc.nextInt();
int v = sc.nextInt();
G.get(u).add(v);
G.get(v).add(u);
}
Main ma=new Main(n,G);
ma.go();
}
}
}
源码:
分享到:
相关推荐
标题 "POJ 1751 求最小生成树Prim算法(JAVA)" 提到的是一个编程挑战,涉及图论中的经典算法——Prim算法。在计算机科学中,Prim算法是用于寻找加权无向图的最小生成树的一种有效方法。最小生成树是一棵树形结构,...
【标题】"POJ.rar_poj java_poj1048" 涉及的知识点主要围绕编程竞赛中的“约瑟夫环”问题,这里是一个加强版,使用Java语言进行解决。 【描述】"POJ1048,加强版的约瑟夫问题 难度中等" 提示我们,这个问题是编程...
用java的biginteger实现的poj1001,比较简单的方法
这道题的目的是求如去除某个点,能把图分成多少个子图,求这样子图的最大数。 其实就是求割点,然后看每个割点能把图分成多少个子图,当然原图不一定是连通的。 割点的求法各个书籍上都有,其实就是用DFS进行遍历。
【标题】"凸包练习: POJ 2187(JAVA)" 是一个关于编程算法的挑战,主要涉及计算机科学中的几何算法。在本问题中,我们关注的是二维平面上的点集及其凸包(Convex Hull)的概念。凸包可以被理解为一个最小的多边形,该...
总的来说,【北大POJ JAVA源码】是一个宝贵的教育资源,它不仅可以帮助初学者掌握基础的编程技能和算法知识,还能为有经验的程序员提供深入理解和实践算法的机会。通过学习和研究这些源码,你将能够更好地应对各种...
poj平台有关数据结构题的Java源码 1159 1276 2406 2502 2509 2513 2533 2778 3176
- **欧拉回路**:如果一个连通的无向图中每个顶点的度数都是偶数,则该图存在至少一条经过每条边恰好一次的回路,这样的回路称为欧拉回路。 - **欧拉路径**:如果一个连通的无向图恰好有两个顶点的度数为奇数,其余...
POJ(Programming Online Judge)是一个在线编程评测系统,它提供了许多编程题目供参赛者练习和提交代码。 【描述】虽然描述部分为空,但我们可以推测,作者在博客中可能详细解释了树状数组的概念、特性以及其在...
【标题】"POJ2002-Squares"是一个经典的计算机编程题目,源自北京大学的在线判题系统(POJ,即PKU Online Judge)。这个题目主要涉及到算法设计和实现,尤其是数学和动态规划方面的知识。 【描述】"解题报告+AC代码...
标题中的“图的深搜+树状数组练习 POJ 3321(JAVA)”指的是一个编程题目,其中涉及到图的深度优先搜索(DFS, Depth First Search)算法和树状数组(也称为线段树,Segment Tree)的数据结构。这个题目来源于POJ...
【标题】"poj1276解答和分析"是一个关于解决特定编程问题的资源集合,其中包含了作者对于这个问题的理解、解析以及相应的源代码。在编程竞赛或算法学习中,POJ(Problem On The Internet)是流行的一个在线判题系统...
POJ1503解答 POJ1503解答,正确答案(已通过POJ)
根据给定的信息,本文将对“缙云烧饼 poj openjudge Java”这一题目进行详细的解析,包括题目背景、代码逻辑解读、算法思路分析等方面。 ### 题目背景 题目来源于POJ(Peking University Online Judge)平台上的一...
标题中的“字典树练习 POJ 1056”是指一个编程问题,源自编程竞赛网站POJ(Programming Online Judge)的题目1056。POJ是一个在线平台,程序员可以在这里提交代码并测试其正确性,以解决给定的问题。这类问题通常...
3. **Dijkstra算法**:这是解决单源最短路径问题的经典算法,适用于有向图或无向图,但边的权重必须非负。Dijkstra算法通过维护一个优先队列,逐步找到从源节点到其他所有节点的最短路径。 4. **Floyd-Warshall算法...
在POJ中,每道题目都有一个唯一的三位或四位数字的编号,例如1000、1001等,参赛者可以通过这些编号找到对应的题目进行解答。这里的数字序列可能意味着要讨论或者解析的特定题目集合,这些题目可能涵盖了不同的难度...
1、前序遍历的第一个字母必是 根 2、在中序遍历的字母串中找出 根字母,那么根字母左右两边的字符串就分别是它的左、右子树 3、利用递归复原二叉树(把子树看作新的二叉树) 4、后序遍历特征:后序遍历字母串 自右至...