반응형

https://www.acmicpc.net/problem/10282

 

10282번: 해킹

최흉최악의 해커 yum3이 네트워크 시설의 한 컴퓨터를 해킹했다! 이제 서로에 의존하는 컴퓨터들은 점차 하나둘 전염되기 시작한다. 어떤 컴퓨터 a가 다른 컴퓨터 b에 의존한다면, b가 감염되면

www.acmicpc.net

 

다익스트라 알고리즘을 이용하여 풀었습니다.

a, b, s의 입력은 b에서 a로 향하는 간선으로 표현하였습니다.

#include <iostream>
#include <vector>
#include <queue>
#include <algorithm>
#define INF 987654321
using namespace std;
int t, n, d, c, a, b, s;
vector<vector<pair<int, int>>> graph;
vector<int> dist;
void dijkstra(int start){
    int cnt = 0, t = 0;
    dist.clear();
    dist.resize(n + 1, INF);
    priority_queue<pair<int, int>, vector<pair<int, int>>, greater<pair<int, int>>> pq;
    dist[start] = 0;
    pq.push({0, start});
    while (!pq.empty()) {
        int cost = pq.top().first;
        int vertex = pq.top().second;
        pq.pop();
        if (dist[vertex] < cost) continue;
        t = cost; // 마지막 컴퓨터 감염 시간
        for (int i = 0; i < graph[vertex].size(); i++) {
            int nextVertex = graph[vertex][i].first;
            int nextCost = cost + graph[vertex][i].second;
            if (dist[nextVertex] > nextCost) {
                dist[nextVertex] = nextCost;
                pq.push({ nextCost, nextVertex });
            }
        }
        cnt++;
    }
    printf("%d %d\n", cnt, t);
}

int main() {
    scanf("%d", &t);
    while (t--) {
        graph.clear();
        graph.resize(10001);
        scanf("%d %d %d", &n, &d, &c);
        for (int i = 0; i < d; i++) {
            scanf("%d %d %d", &a, &b, &s);
            graph[b].push_back({ a, s });
        }
        dijkstra(c);
    }
}
반응형

'Algorithm' 카테고리의 다른 글

프로그래머스 : 가사 검색  (0) 2021.11.13
프로그래머스 : 크레인 인형뽑기 게임  (0) 2021.11.13
백준 2638 : 치즈  (0) 2021.11.13
백준 4485 : 녹색 옷 입은 애가 젤다지?  (0) 2021.11.13
백준 11967 : 불켜기  (0) 2021.11.13

+ Recent posts