본문 바로가기
PS 문제 풀이/Jungol

[Jungol] 정올 2223 블랙홀

by 까망 하르방 2021. 4. 3.
반응형

출처http://jungol.co.kr/bbs/board.php?bo_table=pbank&wr_id=1484&sca=9040

Approach

벨만-포드 (Bellman-Ford) 알고리즘을 이용할 수 있다.

 

벨만-포드 (Bellman-Ford)

개념 가중 유향 그래프에서 최단 경로를 구하는 알고리즘입니다. 벨만 포드 알고리즘은 동작원리는 다익스트라(Dijkstra)와 유사합니다. 차이점은 벨만 포드는 음수 가중치가 존재하는 경우에도

zoosso.tistory.com


#include <stdio.h>
const int LM = 505;
int N, M, B, dist[LM];
struct Data {
    int s, e, t;
}A[LM * 12];

int acnt;
void input() {
    scanf("%d %d %d", &N, &M, &B);
    int i, s, e, t;
    acnt = 0;
    for (i = 0; i < M; ++i) {
        scanf("%d %d %d", &s, &e, &t);
        A[acnt++] = { s, e, t };
        A[acnt++] = { e, s, t };
    }
    for (i = 0; i < B; ++i) {
        scanf("%d %d %d", &s, &e, &t);
        A[acnt++] = { s, e, -t };
    }
}

int BellmanFord() {
    int i, j, flag;
    for (i = 0; i <= N; ++i) {
        dist[i] = 0;
    }
    for (i = 1; i <= N; ++i) {
        flag = 0;
        for (j = 0; j < acnt; ++j) {
            if (dist[A[j].e] > dist[A[j].s] + A[j].t) {
                dist[A[j].e] = dist[A[j].s] + A[j].t;
                flag = 1;
            }
        }
    }
    return flag;
}

int main() {
    // freopen("input.txt", "r", stdin);
    int tc;
    scanf("%d", &tc);
    while (tc--) {
        input();
        puts(BellmanFord() ? "YES" : "NO");
    }
    return 0;
}

 

반응형

'PS 문제 풀이 > Jungol' 카테고리의 다른 글

[Jungol] 정올 2601 종이접기  (0) 2021.07.21
[Jungol] 정올 2586 자동분무기(중)  (0) 2021.05.16
[Jungol] 정올 1863 종교  (0) 2021.04.02
[Jungol] 정올 1516 단어세기  (0) 2021.03.18
[Jungol] 정올 1264 마법색종이  (0) 2021.03.18

댓글