본문 바로가기
코딩/문제풀이-백준

백준 10282번 - 해킹 (C++)

by 남대현 2021. 11. 3.
반응형

문제

해결 방법

우선순위 큐(priority_queue)에 현재 감염된 컴퓨터와 연결된 컴퓨터들을 감염시간과 함께 pair<감염 시간, 컴퓨터 숫자> 형식으로 넣어주었다. 큐에서 이를 반복하였다.

또한, 소요 시간이 초기값이 아니라면, 이미 한번 이 컴퓨터가 해킹당했고, 우선순위 큐에서 이전에 탐색되었다는 의미는 이미 더 짧은 소요 시간으로 도달할 수 있다는 의미이기 때문에 continue해주었다.

아쉬웠던 점

없음

코드

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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
#include <iostream>
#include <vector>
#include <string>
#include <queue>
using namespace std;
 
int Hack_Num=0, Hack_Time=0;
void Hacking(vector<vector<pair<intint>>> &_Vec, vector<int> &_Time_Vec, int _Num)
{
    priority_queue<pair<intint>vector<pair<intint>>, greater<pair<intint>>> Que;
    Que.push({ 0, _Num });
 
    pair<intint> P;
    while (!Que.empty())
    {
        P = Que.top();
        Que.pop();
 
        if (_Time_Vec[P.second] != -1)
            continue;
 
        _Time_Vec[P.second] = P.first;
        Hack_Num++;
        Hack_Time = P.first;
 
        for (auto& i : _Vec[P.second])
            if (_Time_Vec[i.second] == -1)
                Que.push({i.first + _Time_Vec[P.second], i.second});
    }
}
 
int main()
{
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    cout.tie(NULL);
 
    int Testcase_Num, Computer_Num, Hacking_Num, Dependency_Num;
    cin >> Testcase_Num;
    
    int a, b, c;
    for (int Test = 0; Test < Testcase_Num; ++Test)
    {
        Hack_Num = 0;
        Hack_Time = 0;
 
        cin >> Computer_Num >> Dependency_Num >> Hacking_Num;
        vector<vector<pair<intint>>> Vec(Computer_Num+1);
        vector<int> Time_Vec(Computer_Num+1-1);
 
        for (int i = 0; i < Dependency_Num; ++i)
        {
            cin >> a >> b >> c;
            //b가 감염될때 c초 후, a도 감염
            Vec[b].emplace_back(c, a);
        }
 
        Hacking(Vec, Time_Vec, Hacking_Num);
 
        cout << Hack_Num << " "<< Hack_Time << "\n";
    }
 
    return 0;
}
cs

while문에 보면 

 

 

반응형

'코딩 > 문제풀이-백준' 카테고리의 다른 글

백준 13460번 - 구슬 탈출 2 (C++)  (0) 2021.10.26
백준 2252번 - 줄 세우기 (C++)  (0) 2021.10.08
백준 9661번 - 돌 게임 7 (C++)  (0) 2021.10.02
백준 11438번 - LCA2 (C++)  (0) 2021.10.02
백준 5430번 - AC (C++)  (0) 2021.10.02

댓글