๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
Algorithm ๐Ÿง‘๐Ÿป‍๐Ÿ’ป/๋ฐฑ์ค€(BOJ)

[๋ฐฑ์ค€,c++] 21278๋ฒˆ - ํ˜ธ์„์ด ๋‘ ๋งˆ๋ฆฌ ์น˜ํ‚จ

by ์•ˆ์ฃผํ˜• 2022. 9. 18.

๋ฌธ์ œ

 

21278๋ฒˆ: ํ˜ธ์„์ด ๋‘ ๋งˆ๋ฆฌ ์น˜ํ‚จ

์œ„์˜ ๊ทธ๋ฆผ๊ณผ ๊ฐ™์ด 1๋ฒˆ๊ณผ 2๋ฒˆ ๊ฑด๋ฌผ์— ์น˜ํ‚จ์ง‘์„ ์ง“๊ฒŒ ๋˜๋ฉด 1๋ฒˆ๋ถ€ํ„ฐ 5๋ฒˆ ๊ฑด๋ฌผ์— ๋Œ€ํ•ด ์น˜ํ‚จ์ง‘๊นŒ์ง€์˜ ์™•๋ณต ์‹œ๊ฐ„์ด 0, 0, 2, 2, 2 ๋กœ ์ตœ์†Œ๊ฐ€ ๋œ๋‹ค. 2๋ฒˆ๊ณผ 3๋ฒˆ ๊ฑด๋ฌผ์— ์ง€์–ด๋„ ๋™์ผํ•œ ์™•๋ณต ์‹œ๊ฐ„์ด ๋‚˜์˜ค์ง€๋งŒ ๋”

www.acmicpc.net

 

์ฝ”๋“œ

#include <iostream>
#define INF 1e9
using namespace std;


int N, M;
int d[101][101];
int main(){
    ios_base::sync_with_stdio(false);
    cin.tie(0);
    
    for(int i=0; i<101; i++){
        for(int k=0; k<101; k++){
            if(i==k) d[i][k] = 0;
            else d[i][k] = INF;
        }
    }
    cin>>N>>M;
    
    for(int i=0; i<M; i++){
        int a, b; cin>>a>>b;
        d[a][b] = 1;
        d[b][a] = 1;
    }
    
    for(int k=1; k<=N; k++){
        for(int a=1; a<=N; a++){
            for(int b=1; b<=N; b++){
                d[a][b] = min(d[a][b], d[a][k] + d[k][b]);
            }
        }
    }
    
    int chick1 = 0, chick2 = 0;
    int min_d = 1e9;
    
    for(int i=1; i<=N; i++){    // ์น˜ํ‚จ์ง‘ ๊ณ ๋ฅด๊ธฐ
        for(int j=i+1; j<=N; j++){
            int temp_d = 0;
            for(int k = 1; k<=N; k++){
                temp_d += min(i==k?0:d[i][k], j==k?0:d[j][k]);    // ์น˜ํ‚จ์ง‘๊นŒ์ง€์˜ ๊ฑฐ๋ฆฌ ๊ฐฑ์‹ 
            }
            if(temp_d < min_d){
                min_d = temp_d;
                chick1 = i;
                chick2 = j;
            }
        }
    }
    
    cout<< chick1 << ' ' << chick2 << ' ' << min_d * 2;
}

 

ํ’€์ด

ํ”Œ๋กœ์ด๋“œ-์™€์ƒฌ์„ํ†ตํ•ด์„œ ๋จผ์ € ๊ฐ๊ฐ์˜ ๋…ธ๋“œ๊นŒ์ง€์˜ ์ตœ๋‹จ๊ฑฐ๋ฆฌ๋ฅผ ์ „๋ถ€ ๊ฐฑ์‹ ์‹œ์ผœ์ค๋‹ˆ๋‹ค.

๊ทธ ํ›„, ์น˜ํ‚จ์ง‘์„ ๋‘ ๊ฐ€์ง€ ๊ณจ๋ผ์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— for๋ฌธ์„ ๋Œ๋ ค์„œ ๋‘ ๊ฐœ์˜ ์น˜ํ‚จ์ง‘ ๋…ธ๋“œ๋ฅผ ๊ณ ๋ฅด๊ณ , ๋ชจ๋“  ๊ฐ ๋…ธ๋“œ์—์„œ ๋‘ ์น˜ํ‚จ์ง‘ ์‚ฌ์ด์˜ ๊ฑฐ๋ฆฌ๊ฐ€ ์งง์€ ๊ฒƒ์˜ ๊ฑฐ๋ฆฌ๋ฅผ ๋”ํ–ˆ์„ ๋•Œ, ๊ฐ€์žฅ ์ตœ์†Œ์˜ ๊ฑฐ๋ฆฌ๋ฅผ ๊ฐ€์ง€๋Š” ๊ฐ’์„ ์ฐพ์•„ ์น˜ํ‚จ์ง‘์˜ ๋…ธ๋“œ์™€ ๊ฑฐ๋ฆฌ์˜ ํ•ฉ์„ ๊ฐฑ์‹ ์‹œ์ผœ์ค๋‹ˆ๋‹ค.

์‹œ๊ฐ„ ๋ณต์žก๋„๋Š” O(N^3), O(100^3) ์ด๋ฏ€๋กœ O(10,000,000) ์•ˆ์— ํ•ด๊ฒฐ์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

๋Œ“๊ธ€