Advertisement
Guest User

Untitled

a guest
Dec 13th, 2019
99
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 1.91 KB | None | 0 0
  1. import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; import java.util.ArrayDeque; import java.util.ArrayList; import java.util.Arrays; import java.util.Scanner; public class Main { public static void main(String[] args) { try { FileReader fileReader = new FileReader("in.txt"); Scanner scanner = new Scanner(fileReader); int numVertex = scanner.nextInt(); ArrayList<Integer>[] adjacencyList = new ArrayList[numVertex]; for(int i = 0; i < numVertex; i++){ int size = scanner.nextInt(); ArrayList<Integer> adjacency = new ArrayList<>(); for(int j = 0; j < size; j++){ adjacency.add(scanner.nextInt() - 1); } adjacencyList[i] = adjacency; } int maxTime = 0; int firstVertex = 0; boolean isPossible = false; for(int i = 0; i < numVertex; i++){ boolean[] flags = new boolean[numVertex]; Arrays.fill(flags,false); ArrayDeque<Integer> queue = new ArrayDeque<>(); int[] distance = new int[numVertex]; int[] max = new int[1]; distance[0] = 0; queue.addLast(i); flags[i] = true; bfs(adjacencyList, queue, flags, distance, max); if(!searchFalse(flags)){ int time = max[0]; if(maxTime <= time){ maxTime = time; firstVertex = i + 1; } isPossible = true; } } FileWriter fileWriter = new FileWriter("out.txt"); if(isPossible) { fileWriter.write(maxTime + "\n" + firstVertex); } else { fileWriter.write("impossible"); } fileWriter.close(); fileReader.close(); } catch (IOException e) { System.out.print(e.getMessage()); } } private static boolean searchFalse(boolean[] array){ for(boolean element : array){ if(!element){ return true; } } return false; } private static void bfs(ArrayList<Integer>[] adjacencyList, ArrayDeque<Integer> queue, boolean[] flags, int[] dst, int[] max){ while(!queue.isEmpty()) { int vertex = queue.pollFirst(); for (int element: adjacencyList[vertex]) { if (!flags[element]) { queue.addLast(element); flags[element] = true; dst[element] = dst[vertex] + 1; if(dst[element] > max[0]){ max[0] = dst[element]; } } } } } }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement