ํฐ์คํ ๋ฆฌ ๋ทฐ
https://www.acmicpc.net/problem/1516
----------------------------------------------------------------------------------------------------------------------
[๋ฌธ์ ํ์ด]
์ด ๋ฌธ์ ๋ ํน์์๊ณ ๋ฆฌ์ฆ์ธ ์์์ ๋ ฌ์ ์ฌ์ฉํด์ผ ํ๋ ๋ฌธ์ ์์ต๋๋ค.
( ์์์ ๋ ฌ์ ๋ชฐ๋ผ์ ํ์ฐธ ํค๋งค๋ค๊ฐ ๊ฒฐ๊ตญ ํ์ด๋ฅผ ์ฐธ๊ณ ํด์ ํ์๋ค์ใ ใ )
์๋์ ๋ธ๋ก๊ทธ๊ฐ ์์์ ๋ ฌ์ ์ดํดํ๋๋ฐ ๋ง์ ๋์์ด ๋์์ต๋๋ค.
https://codingnojam.tistory.com/66
์์ 1๋ฒ์ ์ดํด๋ณด๋ฉด ์ปดํจํฐ์ ์ง์ ์ฐจ์์ธ degree[]๋ฐฐ์ด์ ์๋์ ๊ฐ์ต๋๋ค.
๋ฐ๋ผ์ ์ง์ ์ฐจ์๊ฐ 0์ธ 1์ ์ฐ์ ์์ํ์ ๋ฃ์ด์ฃผ๊ณ ๋ ธ๋๋ค์ ์์กด๊ด๊ณ๋ฅผ child ArrayList์ ์ ์ฅํ์ฌ ์์์ ๋ ฌ์ ์งํํฉ๋๋ค.
์ด๋, ๋ค๋ฅธ ์ผ๋ฐ์ ์ธ ์์์ ๋ ฌ๊ณผ ๋ค๋ฅด๊ฒ ๊ฒ์ ๊ฐ๋ฐ ๋ฌธ์ ์์๋ ๋ชจ๋ ๊ฑด๋ฌผ์ ์ง๋๋ฐ ์ต์์๊ฐ์ ๊ตฌํด์ผํ๊ธฐ ๋๋ฌธ์ ๊ฑด๋ฌผ์ ์ง๋๋ฐ ๋๋ ์๊ฐ์ ์ ์ฅํ ๋ฐฐ์ด time[]๊ณผ ํด๋น ๋ ธ๋๊น์ง ์ค๊ธฐ์ํด ๋ฐฉ๋ฌธํ๋ ๋ ธ๋๋ค์ ์ต๋๊ฐ์ ์ ์ฅํด๋๋ maxTime[]์ ์ถ๊ฐํ์์ต๋๋ค.
[์ ๋ต ์ฝ๋]
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Map;
import java.util.PriorityQueue;
import java.util.StringTokenizer;
public class Main {
public static int N;
public static int time[];
public static ArrayList<ArrayList<Integer>> child = new ArrayList<ArrayList<Integer>>();
public static int maxTime[];
public static int degree[];
public static PriorityQueue<Integer> pq = new PriorityQueue<>();
public static ArrayList<Integer> start = new ArrayList<>();
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
N = Integer.parseInt(br.readLine());
time = new int[N + 1];
maxTime = new int[N + 1];
degree = new int[N + 1];
for(int i=0;i<=N;i++) {
child.add(new ArrayList<Integer>());
}
for(int i=1;i<=N;i++) {
StringTokenizer st = new StringTokenizer(br.readLine());
time[i] = Integer.parseInt(st.nextToken());
int num = Integer.parseInt(st.nextToken());
int cnt = 0;
if(num == -1) {
pq.offer(i);
} else {
while(num != -1) {
cnt++;
child.get(num).add(i);
num = Integer.parseInt(st.nextToken());
}
degree[i] = cnt;
}
}
findChild();
for(int i=1;i<=N;i++) {
System.out.println(time[i]);
}
}
public static void findChild() {
while(!pq.isEmpty()) {
int p = pq.poll();
for(Integer i:child.get(p)) {
degree[i]--;
maxTime[i] = Math.max(maxTime[i], time[p]);
if(degree[i] == 0) {
time[i] += Math.max(maxTime[i], time[p]);
pq.offer(i);
}
}
}
}
}
'Algorithm > Baekjoon' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Java] ๋ฐฑ์ค 2461๋ฒ - ๋ํ ์ ์ (0) | 2022.06.05 |
---|---|
[Java] ๋ฐฑ์ค 2564๋ฒ - ๊ฒฝ๋น์ (0) | 2022.06.05 |
[Java] ๋ฐฑ์ค 2056๋ฒ -์์ (0) | 2022.06.05 |
[Java] ๋ฐฑ์ค 19237๋ฒ - ์ด๋ฅธ ์์ด (0) | 2022.05.29 |
[Java] ๋ฐฑ์ค 1725๋ฒ - ํ์คํ ๊ทธ๋จ (0) | 2022.05.29 |
- Total
- Today
- Yesterday
- ์นด์นด์ค ์ธํด
- ์ ์ญ ๋ณ์
- JavaScript
- ๋คํธ์ํฌ
- ์๊ณ ๋ฆฌ์ฆ
- ์ฝ๋ฉํ ์คํธ
- ๋ฐฑ์ค javascript
- Baekjoon
- ํฌํฌ์ธํฐ
- ํ๋กํ ์ฝ
- ๋ค์ด๋๋ฏน ํ๋ก๊ทธ๋๋ฐ
- TDD
- fp
- ํ๋กํผํฐ
- ํ๋ก๊ทธ๋๋จธ์ค
- 2019 ์นด์นด์ค ๊ฐ๋ฐ์ ๊ฒจ์ธ ์ธํด
- ์ด๋ถํ์
- ๋ ์์ปฌ ํ๊ฒฝ
- ์๋ฐ
- ๋ฐฑ์ค node.js
- ์๋ฐ์คํฌ๋ฆฝํธ
- ๋ฐฑ์ค
- ์ด์์ฒด์
- ๊ฐ์ฒด์งํฅ ํ๋ก๊ทธ๋๋ฐ
- ํจ์ํ ํ๋ก๊ทธ๋๋ฐ
- http
- ๋ชจ๋ ์๋ฐ์คํฌ๋ฆฝํธ deep dive
- ๋์์ธ ํจํด
- git
- map
์ผ | ์ | ํ | ์ | ๋ชฉ | ๊ธ | ํ |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |