반응형
12-24 00:25
Today
Total
«   2024/12   »
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
관리 메뉴

개발하는 고라니

[백준] 2458번 : 키 순서 본문

Programming/백준

[백준] 2458번 : 키 순서

조용한고라니 2021. 3. 3. 01:51
반응형
 

2458번: 키 순서

1번부터 N번까지 번호가 붙여져 있는 학생들에 대하여 두 학생끼리 키를 비교한 결과의 일부가 주어져 있다. 단, N명의 학생들의 키는 모두 다르다고 가정한다. 예를 들어, 6명의 학생들에 대하여

www.acmicpc.net


[플로이드-와샬]

일반적인 플로이드-와샬을 이용하여 모든 사람간의 키 순서를 구하면 된다. 여기까지는 유추하기 쉬울 수 있으나, 특정 사람 i가 몇 번째로 큰 것 인지에 대한 것을 판단하기는 약간 어려울 수 있다.

 

만일 특정 사람 i가 다른 사람 j에 대하여 키 관계를 모를 때, j 입장에서도 i의 키 관계를 모른다면 그것은 자신이 몇 번째로 큰 사람인지 모르는 것과 마찬가지이다.

 

# Code </>

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

public class Main {

    static final int INF = 1000000000;
    static int[][] d = new int[501][501];

    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st = new StringTokenizer(br.readLine());

        int n = Integer.parseInt(st.nextToken());
        int m = Integer.parseInt(st.nextToken());

        for(int i=1; i<=n; i++)
            for(int j=1; j<=n; j++)
                if(i == j) continue;
                else d[i][j] = INF;

        for(int i=0; i<m; i++){
            st = new StringTokenizer(br.readLine());

            int v1 = Integer.parseInt(st.nextToken());
            int v2 = Integer.parseInt(st.nextToken());

            d[v2][v1] = 1;
        }

        for(int k=1; k<=n; k++)
            for(int i=1; i<=n; i++)
                for(int j=1; j<=n; j++)
                    d[i][j] = Math.min(d[i][j], d[i][k] + d[k][j]);

        int cnt = 0;
        for(int i=1; i<=n; i++) {
            boolean flag = true;

            for (int j = 1; j <= n; j++)
                if(d[i][j] == INF && d[j][i] == INF) {
                    flag = false;
                    break;
                }

            if(flag) cnt++;
        }

        System.out.println(cnt);
    }
}
반응형

'Programming > 백준' 카테고리의 다른 글

[백준] 16398번 : 행성 연결  (0) 2021.03.06
[백준] 2660번 : 회장뽑기  (0) 2021.03.04
[백준] 14442번 : 벽 부수고 이동하기 2  (0) 2021.03.02
[백준] 11404번 : 플로이드  (0) 2021.02.27
[백준] 1613번 : 역사  (0) 2021.02.26
Comments