ENG  RUSTimus Online Judge
Online Judge
Задачи
Авторы
Соревнования
О системе
Часто задаваемые вопросы
Новости сайта
Форум
Ссылки
Архив задач
Отправить на проверку
Состояние проверки
Руководство
Регистрация
Исправить данные
Рейтинг авторов
Текущее соревнование
Расписание
Прошедшие соревнования
Правила
вернуться в форум

Обсуждение задачи 1272. Метро не в Екатеринбурге

Please help.I cant find my bug(wa14:)
Послано moveUp 16 сен 2009 23:00


import java.util.Scanner;

public class Timus1272 {

    private static int[] p;
    private static int[] rank;

    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        int n = input.nextInt();
        int k = input.nextInt();
        int m = input.nextInt();
        p = new int[n + 1];
        rank = new int[n + 1];
        for (int i = 1; i <= n; i++) {
            p[i] = i;
            rank[i] = 1;
        }
        int bridge = 0;
        for (int i = 1; i <= k + m; i++) {
            int u = input.nextInt();
            int v = input.nextInt();
            if(FindRoot(u) == FindRoot(v))
                continue;
            if(i > k )
                bridge++;
            Union(u, v);
        }
        System.out.println(bridge);
    }

    private static void Union(int u, int v) {
        int r1 = FindRoot(u);
        int r2 = FindRoot(v);
        if(rank[r1] > rank[r2]){
            p[v] = u;
        }
        else{
            if(rank[r1] < rank[r2]){
                p[u] = v;
            }
            else{
                rank[r1]++;
                p[v] = u;
            }
        }

    }

    private static int FindRoot(int u) {
        while(u != p[u]){
            u = p[u];
        }
        return u;
    }

}