求割点

来源:互联网 发布:超牛数据恢复软件官网 编辑:程序博客网 时间:2024/06/06 23:56
package com.bluecup.org;import java.util.Iterator;import java.util.Scanner;import java.util.TreeSet;public class CutPoint {/** * @param args */static int n;static TreeSet<Integer>[] sets = new TreeSet[20];static boolean used[] = new boolean[20];static int low[] = new int[20];static int dfn[] = new int[20];public static void main(String[] args) {// TODO Auto-generated method stubScanner scan = new Scanner(System.in);n = scan.nextInt();for (int i = 1; i <= n; i++) {sets[i] = new TreeSet<Integer>();}int i;do {i = scan.nextInt();int j = scan.nextInt();if (i > 0) {sets[i].add(j);sets[j].add(i);}} while (i != 0);dfn(1);int value=0;for(int ii=1;ii<=n;ii++){if(flag[ii]==1){value++;System.out.println(ii);}}}static int times;static int flag[]=new int[20];private static void dfn(int v) {// TODO Auto-generated method stubtimes++;dfn[v] = low[v] = times;int count=0;//System.out.println(sets[v].size());used[v] = true;int size = sets[v].size();Iterator<Integer> it=sets[v].iterator();for (int i = 0; i < size; i++) {int w = it.next();if (used[w] == false) {count++;dfn(w);low[v]=Math.min(low[v],low[w]);if(v==1&&count>=2){flag[v]=1;}if(v!=1&&low[w]>=dfn[v])flag[v]=1;}else if(w!=v){low[v]=Math.min(low[v], dfn[w]);}}}}



 

0 0
原创粉丝点击