Notice
Recent Posts
Recent Comments
Link
개발일지
[백준] 교수님은 기다리지 않는다(3830) 본문
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