Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import java.io.BufferedReader;
- import java.io.IOException;
- import java.io.InputStreamReader;
- import java.util.ArrayList;
- public class ds2 {
- static int[] arrow;
- static int findLeader(int person) {
- if (arrow[person] == person) {
- return person;
- }
- int nextPerson = arrow[person];
- int group = findLeader(nextPerson);
- arrow[person] = group;
- return group;
- }
- static void combine(int person1, int person2) {
- int person1Leader = findLeader(person1);
- int person2Leader = findLeader(person2);
- arrow[person1Leader] = person2Leader;
- }
- public static void main(String[] args) throws IOException {
- BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
- String[] line = br.readLine().split(" ");
- int n = Integer.parseInt(line[0]);
- int m = Integer.parseInt(line[1]);
- // initializing disjoint set
- arrow = new int[n + 6];
- for (int i = 0; i < arrow.length; i++) {
- arrow[i] = i;
- }
- ArrayList<Integer> answer = new ArrayList<Integer>();
- // go through each edge
- for (int i = 0; i < m; i++) {
- line = br.readLine().split(" ");
- int a = Integer.parseInt(line[0]);
- int b = Integer.parseInt(line[1]);
- int aLeader = findLeader(a);
- int bLeader = findLeader(b);
- if (aLeader == bLeader) {
- // skip
- } else {
- answer.add(i);
- combine(a, b);
- }
- }
- // check answer
- if (answer.size() != n - 1) {
- // tree must have n-1
- System.out.println("Disconnected Graph");
- } else {
- for (int edge : answer) {
- System.out.println(edge + 1);
- }
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement