BOJ 10282 해킹

2020. 11. 11. 10:35·알고리즘/BOJ

www.acmicpc.net/problem/10282

 

10282번: 해킹

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

www.acmicpc.net

 

컴퓨터 a가 b를 의존한다면 b컴퓨터가 감염되었을 경우 c초 뒤에 a컴퓨터도 감염된다.

결국 모든 노드에서 한 방향으로 가는 최단거리를 안다면 쉽게 풀리는 문제였다.

첫 시작점에서 다익스트라를 쓰고 INF가 아닌 노드들을 카운트해주고 그 거리 값 중에서 가장 긴 거리 값이 정답이 된다.

 

#include <iostream>
#include <vector>
#include <algorithm>
#include <queue>
using namespace std;

const int INF = 1e9;
int n, d, c, a, b, s, tc;
vector<vector<pair<int, int>>> ar;

vector<int> dijkstra(int s) {
	priority_queue<pair<int, int>> pq;
	vector<int> d(n, INF);
	d[s] = 0;
	pq.push({ 0,s });

	while (!pq.empty()) {
		int cur = pq.top().second;
		int cost = -pq.top().first;
		pq.pop();
		if (d[cur] < cost) continue;
		for (auto i : ar[cur]) {
			int nc = i.second + cost;
			if (nc < d[i.first]) {
				d[i.first] = nc;
				pq.push({ -nc,i.first });
			}
		}
	}

	return d;
}

int main() {
	ios::sync_with_stdio(false); cin.tie(0);

	cin >> tc;
	while (tc--) {
		int cnt = 0, ans = 0;

		cin >> n >> d >> c;
		ar.resize(n);

		for (int i = 0; i < d; ++i) {
			cin >> a >> b >> s;
			ar[b - 1].push_back({ a - 1,s });
		}

		vector<int> d = dijkstra(c - 1);

		for (int i : d) {
			if (i == INF) continue;
			cnt++;
			if (i > ans) ans = i;
		}

		cout << cnt << ' ' << ans << '\n';
		ar.clear();
	}

	return 0;
}

 

근데 INF가 아닌 가장 긴 거리값이 정답이 되는 건지 궁금했는데 생각해보니

그 거리를 지나는 동안 다른 노드들은 이미 감염이 완료되어서 그렇다.

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

BOJ 4386 별자리 만들기  (0) 2020.11.14
BOJ 1922 네트워크 연결  (0) 2020.11.14
BOJ 2573 빙산  (0) 2020.11.07
BOJ 4485 녹색 옷 입은 애가 젤다지?  (0) 2020.11.06
BOJ 1238 파티  (0) 2020.11.05
'알고리즘/BOJ' 카테고리의 다른 글
  • BOJ 4386 별자리 만들기
  • BOJ 1922 네트워크 연결
  • BOJ 2573 빙산
  • BOJ 4485 녹색 옷 입은 애가 젤다지?
khyu2
khyu2
  • khyu2
    dev log
    khyu2
  • 전체
    오늘
    어제
    • 분류 전체보기
      • 알고리즘
        • BOJ
        • Programmers
        • Algorithm
        • SWEA
      • 개발
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    코딩테스트 연습
    분할 정복
    냅색
    우선순위 큐
    이분탐색
    BOJ
    BFS
    소수
    트리
    완전탐색
    조합
    피보나치 수
    피사노 주기
    프로그래머스
    큐
    시뮬레이션
    GREEDY
    MST
    크루스칼
    다익스트라
    dp
    dfs
    팰린드롬
    구현
    행렬 제곱
    알고리즘
    유니온 파인드
    SWEA
    완전 탐색
    이분 탐색
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
khyu2
BOJ 10282 해킹
상단으로

티스토리툴바