https://www.acmicpc.net/problem/15591
풀이
N번까지 번호를 가진 동영상들이 서로 연결되어있다.
연결마다 유사도가 k의 값으로 정해져 있다. 경로를 연결하여 유사도들 중 최소값이 두 동영상의 유사도가 된다.
특정 값을 정해 유사도가 그 값 이상인 동영상들의 개수를 묻는 문제이다.
시작 정점으로 할 동영상의 번호와, 특정 값이 주어지면 bfs탐색을 진행했다.
연결된 노드들을 탐색하여 유사도가 특정 값 K 이상일 때 카운트를 1증가시키며 큐에 넣어 계속했다.
메모리: 80360KB
시간: 1008ms
언어: Java 11
import java.io.*;
import java.util.*;
public class Main {
static class Node {
int v;
int cost;
public Node(int v, int cost) {
this.v = v;
this.cost = cost;
}
}
static int n;
static ArrayList<ArrayList<Node>> list;
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
n = Integer.parseInt(st.nextToken());
int q = Integer.parseInt(st.nextToken());
list = new ArrayList<>();
for (int i = 0; i < n + 1; i++) {
list.add(new ArrayList<>());
}
for (int i = 0; i < n - 1; i++) {
st = new StringTokenizer(br.readLine());
int a = Integer.parseInt(st.nextToken());
int b = Integer.parseInt(st.nextToken());
int c = Integer.parseInt(st.nextToken());
list.get(a).add(new Node(b, c));
list.get(b).add(new Node(a, c));
}
StringBuilder sb = new StringBuilder();
for (int i = 0; i < q; i++) {
st = new StringTokenizer(br.readLine());
int a = Integer.parseInt(st.nextToken());
int b = Integer.parseInt(st.nextToken());
sb.append(connect(a, b)).append("\n");
}
System.out.println(sb);
}
private static int connect(int k, int v) {
Queue<Integer> queue = new LinkedList<>();
boolean[] visit = new boolean[n + 1];
queue.add(v);
visit[v] = true;
int answer = 0;
while (!queue.isEmpty()) {
int node = queue.poll();
for (Node next : list.get(node)) {
if (visit[next.v]) {
continue;
}
if (next.cost >= k) {
answer++;
queue.add(next.v);
visit[next.v] = true;
}
}
}
return answer;
}
}
'Algorithm > Baekjoon' 카테고리의 다른 글
[백준] 16472: 고냥이 - JAVA (0) | 2024.05.29 |
---|---|
[백준] 16194: 카드 구매하기 2 - JAVA (0) | 2024.05.23 |
[백준] 1577: 도로의 개수 - JAVA (1) | 2024.05.23 |
[백준] 15971: 두 로봇 - JAVA (0) | 2024.05.19 |
[백준] 2230: 수 고르기 - JAVA (0) | 2024.05.19 |
[백준] 25682: 체스판 다시 칠하기 2 - JAVA (0) | 2024.05.19 |