개발일지

[백준] 교수님은 기다리지 않는다(3830) 본문

알고리즘

[백준] 교수님은 기다리지 않는다(3830)

devbh 2020. 3. 19. 06:39


import java.io.*;
import java.util.StringTokenizer;

public class Main {

    static int[] parents = new int[1000000];
    static long[] weight = new long[1000000];
    static int N, M;
    static StringBuilder sb = new StringBuilder();

    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st = new StringTokenizer(br.readLine());

        while ((N = stoi(st.nextToken())) + (M = stoi(st.nextToken())) != 0) {
            init();
            for (int i = 0; i < M; i++) {
                st = new StringTokenizer(br.readLine());
                boolean flag = st.nextToken().charAt(0) == '!';
                int a = stoi(st.nextToken()) - 1;
                int b = stoi(st.nextToken()) - 1;
                int pa = find(a);
                int pb = find(b);
                if (flag) {
                    long w = stoi(st.nextToken());
                    if (pa != pb) {
                        parents[pa] = pb;
                        weight[pa] = weight[b] - weight[a] + w;
                    }
                } else {
                    if (pa == pb) {
                        sb.append((weight[a] - weight[b]));
                    } else {
                        sb.append("UNKNOWN");
                    }
                    sb.append("\n");
                }
            }
            st = new StringTokenizer(br.readLine());
        }
        System.out.println(sb.toString());
    }

    private static int find(int a) {
        if (parents[a] < 0) {
            return a;
        }
        int P = find(parents[a]);
        weight[a] += weight[parents[a]];
        return parents[a] = P;
    }

    private static void init() {
        for (int i = 0; i < N; i++) {
            parents[i] = -1;
            weight[i] = 0;
        }
    }
    private static int stoi(String input) {
        return Integer.valueOf(input);
    }
}

'알고리즘' 카테고리의 다른 글

[백준]최단경로(1753)  (0) 2020.03.25
[백준]단절점(11266)  (0) 2020.03.25
[백준] 게임 개발(1516)  (0) 2020.03.19
[백준] 키 순서(2458)  (0) 2020.03.19
[백준] LCA2(11438)  (0) 2020.03.03
Comments