어흥

[백준 13424] 비밀 모임 (C++) 본문

알고리즘/백준

[백준 13424] 비밀 모임 (C++)

라이언납시오 2021. 3. 19. 19:21
728x90
반응형

문제 링크: www.acmicpc.net/problem/13424

 

13424번: 비밀 모임

입력 데이터는 표준 입력을 사용한다. 입력은 T개의 테스트 데이터로 구성된다. 입력의 첫 번째 줄에 테스트 케이스의 개수를 나타내는 자연수 T가 주어진다. 각 테스트 케이스의 첫째 줄에는 방

www.acmicpc.net

1. 주의할 점

- 다익스트라 혹은 플로이드 와샬 알고리즘에 대해 알고 있어야 한다

 

2. 구현

- 모든 간선에 대한 정보를 TC마다 초기화한다

- 간선에 대한 정보를 Arr[][] 배열에 입력받는다

- floydWarshall() 함수를 통해 각 노드사이의 최단거리를 구한다

- 친구들이 위치한 방을 V벡터에 받은 후, 1~Node번방까지 모두 모임의 방이라고 가정하며 모임방↔친구들이 위치한 방까지의 최단경로의 합을 Temp에 저장한다

- Result가 Temp에 의해 갱신된다면, 갱신을 시킨 방번호 K를 idx에 저장한다

#define MAX 987654321
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int node,edge,s,e,val,test,num;
int arr[101][101];

void floydWarshall(){
    for(int k=1;k<=node;k++)
        for(int i=1;i<=node;i++)
            for(int j=1;j<=node;j++)
                if(arr[i][j]>arr[i][k]+arr[k][j])
                    arr[i][j]=arr[i][k]+arr[k][j];
}

int main() {
    ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL);
    cin>>test;
    for(int t=0;t<test;t++){
        cin>>node>>edge;
        for(int i=1;i<=node;i++)
            for(int j=1;j<=node;j++){
                if(i==j) arr[i][j]=0;
                else arr[i][j]=MAX;
            }
        for(int i=0;i<edge;i++){
            cin>>s>>e>>val;
            arr[s][e]=val;
            arr[e][s]=val;
        }
        floydWarshall();
        cin>>num;
        vector<int> v;
        int result = MAX,idx;
        for(int i=0;i<num;i++){
            cin>>val;
            v.push_back(val);
        }
        for(int k=1;k<=node;k++){
            int temp=0;
            for(int i=0;i<num;i++)
                temp+=arr[k][v[i]];           
            if(result>temp){
                result=temp;
                idx=k;
            }
        }
        cout<<idx<<'\n';
    }
    return 0;
}
728x90
반응형

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

[백준 2982] 국왕의 방문 (C++)  (0) 2021.03.26
[백준 13907] 세금 (C++)  (2) 2021.03.19
[백준 2307] 도로 검문 (C++)  (0) 2021.03.19
[백준 1446] 지름길 (C++)  (0) 2021.03.18
[백준 1484] 다이어트 (C++)  (0) 2021.03.18
Comments