Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import java.util.ArrayList;
- import java.util.Arrays;
- import java.util.Scanner;
- public class BridgeNum {
- public static ArrayList<ArrayList<Integer>> ribs = new ArrayList<>();
- public static void main(String[] args) {
- Scanner in = new Scanner(System.in);
- int n = in.nextInt();
- int m = in.nextInt();
- int[] count = new int[1];
- int[] parents = new int[n];
- int[] len = new int[n];
- int[] nowLen = new int[n];
- Arrays.fill(parents, -1);
- Arrays.fill(count, 0);
- for (int i = 0; i < n; i++){
- ArrayList<Integer> arr= new ArrayList<>();
- ribs.add(arr);
- }
- for (int i = 0; i < m ;i++){
- int v = in.nextInt();
- int u = in.nextInt();
- ribs.get(v).add(u);
- ribs.get(u).add(v);
- }
- int[] helper = new int[n];
- Arrays.fill(helper, -1);
- Thread t=new Thread(null,null,"Main",2 << 23){
- public void run(){
- for (int i = 0; i < n; i++){
- if (helper[i] == -1) dfs(i, 1, count, helper, len, nowLen, parents);
- }
- System.out.println(count[0]);
- }
- };
- t.start();
- }
- public static void dfs(int i, int k, int[] count, int[] helper, int[] len, int[] nowLen, int[] parents){
- helper[i] = 0;
- len[i] = nowLen[i] = k;
- int j = -1;
- while (++j < ribs.get(i).size()){
- int v = ribs.get(i).get(j);
- if (helper[v] != -1 && v != parents[i])
- nowLen[i] = Math.min(len[v], nowLen[i]);
- if(helper[v] == -1) {
- parents[v] = i;
- ++k;
- dfs(v, k, count, helper, len, nowLen, parents);
- nowLen[i] = Math.min(nowLen[v], nowLen[i]);
- if (nowLen[v] > len[i]) ++count[0];
- }
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement