λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°
πŸ”‘ PS/BOJ

boj-2252

by bdd 2022. 8. 22.
 

2252번: 쀄 μ„Έμš°κΈ°

첫째 쀄에 N(1 ≤ N ≤ 32,000), M(1 ≤ M ≤ 100,000)이 주어진닀. M은 ν‚€λ₯Ό λΉ„κ΅ν•œ νšŒμˆ˜μ΄λ‹€. λ‹€μŒ M개의 μ€„μ—λŠ” ν‚€λ₯Ό λΉ„κ΅ν•œ 두 ν•™μƒμ˜ 번호 A, Bκ°€ 주어진닀. μ΄λŠ” 학생 Aκ°€ 학생 B의 μ•žμ— μ„œμ•Ό ν•œλ‹€λŠ” 의

www.acmicpc.net

 

 

 

 

 

문제


Nλͺ…μ˜ 학생듀을 ν‚€ μˆœμ„œλŒ€λ‘œ 쀄을 μ„Έμš°λ €κ³  ν•œλ‹€. 각 ν•™μƒμ˜ ν‚€λ₯Ό 직접 μž¬μ„œ μ •λ ¬ν•˜λ©΄ κ°„λ‹¨ν•˜κ² μ§€λ§Œ, λ§ˆλ•…ν•œ 방법이 μ—†μ–΄μ„œ 두 ν•™μƒμ˜ ν‚€λ₯Ό λΉ„κ΅ν•˜λŠ” 방법을 μ‚¬μš©ν•˜κΈ°λ‘œ ν•˜μ˜€λ‹€. κ·Έλ‚˜λ§ˆλ„ λͺ¨λ“  학생듀을 λ‹€ 비ꡐ해 λ³Έ 것이 μ•„λ‹ˆκ³ , 일뢀 ν•™μƒλ“€μ˜ ν‚€λ§Œμ„ 비ꡐ해 λ³΄μ•˜λ‹€. 일뢀 ν•™μƒλ“€μ˜ ν‚€λ₯Ό λΉ„κ΅ν•œ κ²°κ³Όκ°€ μ£Όμ–΄μ‘Œμ„ λ•Œ, 쀄을 μ„Έμš°λŠ” ν”„λ‘œκ·Έλž¨μ„ μž‘μ„±ν•˜μ‹œμ˜€.

 

 

 

μž…λ ₯


첫째 쀄에 N(1 ≤ N ≤ 32,000), M(1 ≤ M ≤ 100,000)이 주어진닀. M은 ν‚€λ₯Ό λΉ„κ΅ν•œ νšŒμˆ˜μ΄λ‹€. λ‹€μŒ M개의 μ€„μ—λŠ” ν‚€λ₯Ό λΉ„κ΅ν•œ 두 ν•™μƒμ˜ 번호 A, Bκ°€ 주어진닀. μ΄λŠ” 학생 Aκ°€ 학생 B의 μ•žμ— μ„œμ•Ό ν•œλ‹€λŠ” μ˜λ―Έμ΄λ‹€. ν•™μƒλ“€μ˜ λ²ˆν˜ΈλŠ” 1λ²ˆλΆ€ν„° Nλ²ˆμ΄λ‹€.

 

 

 

좜λ ₯


첫째 쀄에 학생듀을 μ•žμ—μ„œλΆ€ν„° 쀄을 μ„Έμš΄ κ²°κ³Όλ₯Ό 좜λ ₯ν•œλ‹€. 닡이 μ—¬λŸ¬ 가지인 κ²½μš°μ—λŠ” μ•„λ¬΄κ±°λ‚˜ 좜λ ₯ν•œλ‹€.

 

 

 

 

풀이


μœ„μƒμ •λ ¬μ— λŒ€ν•œ λ¬Έμ œμ˜€μŠ΅λ‹ˆλ‹€. ν•™μƒλ“€μ˜ ν‚€λ₯Ό λΉ„κ΅ν•˜λŠ”λ° ν˜„μž¬ μžμ‹ κ³Ό 같지 μ•Šμ€ μ‚¬λžŒμ„ κΈ°μ€€μœΌλ‘œ 큐에 λ„£μ–΄ 비ꡐ할 μ‚¬λžŒμ„ 체크해야 ν•©λ‹ˆλ‹€. μ΄λ ‡κ²Œ ν•˜λ©΄ μžμ‹ κ³Ό 비ꡐ가 κ°€λŠ₯ν•œ μ‚¬λžŒλ“€λ§Œ 큐에 λ‚¨κ²Œ λ˜λŠ”λ°μš”, 이λ₯Ό 좜λ ₯ν•΄μ€˜μ•Ό ν•©λ‹ˆλ‹€. λ”°λΌμ„œ ν’€μ΄λŠ” μ•„λž˜μ™€ κ°™μŠ΅λ‹ˆλ‹€. 

 

public class Main {

    static int n, m;
    static int[] studens;
    static int[] indegree;
    static List<Integer>[] array;

    public static void main(String[] args) throws Exception {
        n = input.integer();
        m = input.integer();

        studens = new int[n + 1];
        array = new ArrayList[n + 1];
        indegree = new int[n + 1];

        for (int index = 1; index <= n; index++) {
            array[index] = new ArrayList<>();
        }

        for (int index = 0; index < m; index++) {
            int studentX = input.integer();
            int studentY = input.integer();
            array[studentX].add(studentY);
            indegree[studentY]++;
        }

        Queue<Integer> queue = new PriorityQueue<>();
        for (int index = 1; index <= n; index++) {
            if (indegree[index] == 0) {
                queue.add(index);
            }
        }

        while (!queue.isEmpty()) {
            int pollStudent = queue.poll();
            System.out.print(pollStudent + " ");
            List<Integer> relationship = array[pollStudent];

            for (int next : relationship) {
                indegree[next]--;
                if (indegree[next] == 0) {
                    queue.add(next);
                }
            }
        }
    }

 

 

 

 

 

'πŸ”‘ PS > BOJ' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€

boj-1916  (0) 2022.08.24
boj-1850  (0) 2022.07.23
boj-1922 λ„€νŠΈμ›Œν¬ μ—°κ²°  (0) 2022.07.19
boj-1744 수 λ¬ΆκΈ°  (0) 2022.07.15
boj-1300 K번째 수  (0) 2022.07.14

λŒ“κΈ€