※ 글쓴이는 취미로 코딩을 익혀보는 사람이라 정확하지 않은 내용을 담고 있을 수 있다 ※

 

이번에 볼 문제는 백준 25953번 문제인 템포럴 그래프이다.
문제는 아래 링크를 확인하자.

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

 

25953번: 템포럴 그래프

템포럴 그래프는 시간의 흐름에 따라 변화하는 관계를 표현하는 자료 구조이다. 템포럴 그래프를 구성하는 정점 집합 $V$는 시간의 흐름에 따라 변하지 않으며, 정점의 개수가 $n ≥ 1$이라 할 때

www.acmicpc.net

시간 0에 노드 S에서 출발하여 시간 t에 노드 x까지 이동하는 최단경로는 시간 t-1에 이미 x에 도착해있었거나 t-1에 다른 노드에서 x로 이동해온 두 가지 경우중 하나로 찾을 수 있다.

 

위와 같은 관찰을 이용해 점화식을 세워 DP로 문제를 해결하자.

 

아래는 제출한 소스코드이다.

#include <iostream>
using namespace std;

int N, T, M, S, E;
int dist[1001][10000];

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

	cin >> N >> T >> M >> S >> E;
	for (int i = 0; i < N; i++) dist[0][i] = 1000000007;
	dist[0][S] = 0;
	for(int t = 0; t < T; t++) {
		for (int i = 0; i < N; i++) dist[t + 1][i] = dist[t][i];
		for (int i = 0; i < M; i++) {
			int x, y, w; cin >> x >> y >> w;
			dist[t + 1][y] = min(dist[t + 1][y], dist[t][x] + w);
			dist[t + 1][x] = min(dist[t + 1][x], dist[t][y] + w);
		}
	}

	if (dist[T][E] < 1000000007) cout << dist[T][E];
	else cout << -1;
}
728x90

'BOJ' 카테고리의 다른 글

[BOJ 15236 // C++] Dominos  (0) 2022.11.24
[BOJ 25980 // C++] Abbreviated Aliases  (0) 2022.11.24
[BOJ 25755 // C++] 거울반사  (0) 2022.11.23
[BOJ 15474 // C++] 鉛筆 (Pencils)  (0) 2022.11.23
[BOJ 13221 // C++] Manhattan  (0) 2022.11.23

+ Recent posts