코드와이
[BAEKJOON] 2637. 장난감조립 본문
위상정렬
문제링크
2637번: 장난감조립
첫째 줄에는 자연수 N(3 ≤ N ≤ 100)이 주어지는데, 1부터 N-1까지는 기본 부품이나 중간 부품의 번호를 나타내고, N은 완제품의 번호를 나타낸다. 그리고 그 다음 줄에는 자연수 M(3 ≤ M ≤ 100)이 주
www.acmicpc.net
package acmicpc.Gold2;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
import java.util.Queue;
import java.util.StringTokenizer;
public class 장난감조립 {
public static void main(String[] args) throws NumberFormatException, IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st;
StringBuilder sb = new StringBuilder();
int n = Integer.parseInt(br.readLine());
int m = Integer.parseInt(br.readLine());
int[] cnt = new int[n+1];
int[] rev = new int[n+1];
List<List<Integer>> list = new ArrayList<>();
for(int i = 0 ; i <= m ; i++) {
list.add(new ArrayList<Integer>());
}
int[][] arr = new int[n+1][n+1];
for(int i = 0 ; i < m ; i++) {
st = new StringTokenizer(br.readLine());
int x = Integer.parseInt(st.nextToken());
int y = Integer.parseInt(st.nextToken());
int k = Integer.parseInt(st.nextToken());
list.get(x).add(y);
arr[x][y] = k;
cnt[y]++; // 나가는 갯수
rev[x]++; // 들어오는 갯수
}
Queue<Integer> queue = new LinkedList<Integer>();
int[] ans = new int[n+1];
for(int i = 1 ; i <= n ; i++) {
if(cnt[i] == 0) {
queue.offer(i);
ans[i] = 1;
}
}
while(!queue.isEmpty()) {
int q = queue.poll();
for(int l : list.get(q)) {
if(--cnt[l] == 0) {
queue.offer(l);
}
ans[l] += arr[q][l] * ans[q];
}
}
int[] result = new int[n+1];
for(int i = 1 ; i <= n ; i++) {
for(int j = 1 ; j <= n ; j++) {
if(arr[j][i] != 0) {
result[i] += arr[j][i] * ans[j];
}
}
}
for(int i = 1 ; i <= n ; i++) {
if(rev[i] == 0) {
sb.append(i).append(" ").append(result[i]).append("\n");
}
}
sb.setLength(sb.length()-1);
System.out.println(sb);
}
}
'acmicpc' 카테고리의 다른 글
[BAEKJOON] 1516. 게임 개발 (0) | 2021.04.19 |
---|---|
[BAEKJOON] 2056. 작업 (0) | 2021.04.19 |
[BAEKJOON] 16236. 아기 상어 (0) | 2021.04.16 |
[BAEKJOON] 16235. 나무 재테크 (0) | 2021.04.16 |
[BAEKJOON] 7569. 토마토 (0) | 2021.04.15 |