抗日战争Java_算法笔记_188:历届试题 危险系数(Java)

importjava.util.ArrayList;importjava.util.Scanner;public classMain {public static intn, m;public static intcount;public static int[] DFN;public static int[] Low;public static int[] parent;public static ArrayList[] list;public static ArrayListpoint;

@SuppressWarnings("unchecked")public voidinit() {

count= 0;

DFN= new int[n + 1];

Low= new int[n + 1];

parent= new int[n + 1];

list= new ArrayList[n + 1];

point= new ArrayList();for(int i = 1;i <= n;i++)

list[i]= new ArrayList();

}public void TarJan(int start, intfather) {

DFN[start]= ++count;

Low[start]=DFN[start];

parent[start]=father;int childern = 0;for(int i = 0;i < list[start].size();i++) {int j =list[start].get(i);if(DFN[j] == 0) {

childern++;

TarJan(j, start);

Low[start]=Math.min(Low[start], Low[j]);if(parent[start] == -1 && childern > 1) {if(!point.contains(start))

point.add(start);

}if(parent[start] != -1 && Low[j] >=DFN[start]) {if(!point.contains(start))

point.add(start);

}

}else if(j !=parent[start]) {

Low[start]=Math.min(Low[start], DFN[j]);

}

}

}public void dfs(int a, boolean[] visited) {

visited[a]= true;for(int i = 0;i < list[a].size();i++) {int j =list[a].get(i);if(visited[j] == false)

dfs(j, visited);

}

}public void getResult(int a, intb) {

TarJan(1, -1);int result = 0;for(int i = 0;i < point.size();i++) {if(point.get(i) == a || point.get(i) ==b)continue;else{boolean[] visited = new boolean[n + 1];

visited[point.get(i)]= true;

dfs(a, visited);if(visited[b] == false) {

result++;

}

}

}

System.out.println(result);

}public static voidmain(String[] args) {

Main test= newMain();

Scanner in= newScanner(System.in);

n=in.nextInt();

m=in.nextInt();

test.init();for(int i = 1;i <= m;i++) {int u =in.nextInt();int v =in.nextInt();

list[u].add(v);

list[v].add(u);

}int a =in.nextInt();int b =in.nextInt();

test.getResult(a, b);

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值