Skip to content

Commit 08f6c5d

Browse files
committed
[Gold V] Title: MooTube (Silver), Time: 1212 ms, Memory: 300480 KB -BaekjoonHub
1 parent 83d0b70 commit 08f6c5d

File tree

2 files changed

+106
-0
lines changed

2 files changed

+106
-0
lines changed
Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,68 @@
1+
import java.util.*;
2+
import java.io.*;
3+
public class Main {
4+
private static int N, Q;
5+
private static List<List<Node>> graph = new ArrayList<>();
6+
private static class Node {
7+
int to;
8+
int usado;
9+
10+
public Node(int to, int usado) {
11+
this.to = to;
12+
this.usado = usado;
13+
}
14+
}
15+
public static void main(String[] args) throws IOException{
16+
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
17+
StringTokenizer st = new StringTokenizer(br.readLine());
18+
19+
20+
N = Integer.parseInt(st.nextToken());
21+
Q = Integer.parseInt(st.nextToken());
22+
23+
for(int i = 0; i <= N; i++) {
24+
graph.add(new ArrayList<>());
25+
}
26+
27+
for(int i = 0; i < N-1; i++) {
28+
st = new StringTokenizer(br.readLine());
29+
int a = Integer.parseInt(st.nextToken());
30+
int b = Integer.parseInt(st.nextToken());
31+
int u = Integer.parseInt(st.nextToken());
32+
33+
graph.get(a).add(new Node(b, u));
34+
graph.get(b).add(new Node(a, u));
35+
}
36+
37+
for(int i = 0; i < Q; i++) {
38+
st = new StringTokenizer(br.readLine());
39+
40+
int k = Integer.parseInt(st.nextToken());
41+
int start = Integer.parseInt(st.nextToken());
42+
43+
bfs(k,start);
44+
}
45+
}
46+
47+
private static void bfs(int k, int start) {
48+
boolean[] visit = new boolean[N + 1];
49+
Queue<Integer> q = new LinkedList<>();
50+
visit[start] = true;
51+
q.add(start);
52+
53+
int count = 0;
54+
while(!q.isEmpty()) {
55+
int now = q.poll();
56+
57+
for(Node next : graph.get(now)) {
58+
if(!visit[next.to] && next.usado >= k) {
59+
visit[next.to] = true;
60+
q.add(next.to);
61+
count ++;
62+
}
63+
}
64+
}
65+
66+
System.out.println(count);
67+
}
68+
}
Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
# [Gold V] MooTube (Silver) - 15591
2+
3+
[문제 링크](https://www.acmicpc.net/problem/15591)
4+
5+
### 성능 요약
6+
7+
메모리: 300480 KB, 시간: 1212 ms
8+
9+
### 분류
10+
11+
그래프 이론, 그래프 탐색, 너비 우선 탐색, 깊이 우선 탐색
12+
13+
### 제출 일자
14+
15+
2025년 7월 21일 15:44:16
16+
17+
### 문제 설명
18+
19+
<p>농부 존은 남는 시간에 MooTube라 불리는 동영상 공유 서비스를 만들었다. MooTube에서 농부 존의 소들은 재밌는 동영상들을 서로 공유할 수 있다. 소들은 MooTube에 1부터 N까지 번호가 붙여진 N (1 ≤ N ≤ 5,000)개의 동영상을 이미 올려 놓았다. 하지만, 존은 아직 어떻게 하면 소들이 그들이 좋아할 만한 새 동영상을 찾을 수 있을지 괜찮은 방법을 떠올리지 못했다.</p>
20+
21+
<p>농부 존은 모든 MooTube 동영상에 대해 “연관 동영상” 리스트를 만들기로 했다. 이렇게 하면 소들은 지금 보고 있는 동영상과 연관성이 높은 동영상을 추천 받을 수 있을 것이다.</p>
22+
23+
<p>존은 두 동영상이 서로 얼마나 가까운 지를 측정하는 단위인 “USADO”를 만들었다. 존은 N-1개의 동영상 쌍을 골라서 직접 두 쌍의 USADO를 계산했다. 그 다음에 존은 이 동영상들을 네트워크 구조로 바꿔서, 각 동영상을 정점으로 나타내기로 했다. 또 존은 동영상들의 연결 구조를 서로 연결되어 있는 N-1개의 동영상 쌍으로 나타내었다. 좀 더 쉽게 말해서, 존은 N-1개의 동영상 쌍을 골라서 어떤 동영상에서 다른 동영상으로 가는 경로가 반드시 하나 존재하도록 했다. 존은 임의의 두 쌍 사이의 동영상의 USADO를 그 경로의 모든 연결들의 USADO 중 최솟값으로 하기로 했다.</p>
24+
25+
<p>존은 어떤 주어진 MooTube 동영상에 대해, 값 K를 정해서 그 동영상과 USADO가 K 이상인 모든 동영상이 추천되도록 할 것이다. 하지만 존은 너무 많은 동영상이 추천되면 소들이 일하는 것이 방해될까 봐 걱정하고 있다! 그래서 그는 K를 적절한 값으로 결정하려고 한다. 농부 존은 어떤 K 값에 대한 추천 동영상의 개수를 묻는 질문 여러 개에 당신이 대답해주기를 바란다.</p>
26+
27+
### 입력
28+
29+
<p>입력의 첫 번째 줄에는 N과 Q가 주어진다. (1 ≤ Q ≤ 5,000)</p>
30+
31+
<p>다음 N-1개의 줄에는 농부 존이 직접 잰 두 동영상 쌍의 USADO가 한 줄에 하나씩 주어진다. 각 줄은 세 정수 p<sub>i</sub>, q<sub>i</sub>, r<sub>i</sub> (1 ≤ p<sub>i</sub>, q<sub>i</sub> ≤ N, 1 ≤ r<sub>i</sub> ≤ 1,000,000,000)를 포함하는데, 이는 동영상 p<sub>i</sub>와 q<sub>i</sub>가 USADO r<sub>i</sub>로 서로 연결되어 있음을 뜻한다.</p>
32+
33+
<p>다음 Q개의 줄에는 농부 존의 Q개의 질문이 주어진다. 각 줄은 두 정수 k<sub>i</sub>와 v<sub>i</sub>(1 ≤ k<sub>i</sub> ≤ 1,000,000,000, 1 ≤ v<sub>i</sub> ≤ N)을 포함하는데, 이는 존의 i번째 질문이 만약 K = k<sub>i</sub>라면 동영상 v<sub>i</sub>를 보고 있는 소들에게 몇 개의 동영상이 추천될 지 묻는 것이라는 것을 뜻한다.</p>
34+
35+
### 출력
36+
37+
<p>Q개의 줄을 출력한다. i번째 줄에는 농부 존의 i번째 질문에 대한 답변이 출력되어야 한다.</p>
38+

0 commit comments

Comments
 (0)