Notice
Recent Posts
Recent Comments
Link
알고리즘 모음(C++)
백준 11657 - 타임머신(C++) 본문
문제 링크입니다. https://www.acmicpc.net/problem/11657
11657번: 타임머신
첫째 줄에 도시의 개수 N (1 ≤ N ≤ 500), 버스 노선의 개수 M (1 ≤ M ≤ 6,000)이 주어진다. 둘째 줄부터 M개의 줄에는 버스 노선의 정보 A, B, C (1 ≤ A, B ≤ N, -10,000 ≤ C ≤ 10,000)가 주어진다.
www.acmicpc.net
밸만 포드 알고리즘을 이용해 푸는 문제입니다.
자세한 것은 코드를 참고해주세요.
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <queue>
#include <vector>
#include <cstring>
#include <cmath>
#define P pair<int, int>
#define F first
#define S second
#define INF 987654321
using namespace std;
int N, M;
vector<pair<P, int>> connect;
long long Distance[501];
void Bellman_Ford(){
Distance[1] = 0;
for(int i = 1; i <= N - 1; i++){
for(int j = 0; j < connect.size(); j++){
int x = connect[j].F.F;
int y = connect[j].F.S;
int cost = connect[j].S;
if(Distance[x] == INF) continue;
if(Distance[y] > Distance[x] + cost){
Distance[y] = Distance[x] + cost;
}
}
}
for(int i = 0; i < connect.size(); i++){
int x = connect[i].F.F;
int y = connect[i].F.S;
int cost = connect[i].S;
if(Distance[x] == INF) continue;
if(Distance[y] > Distance[x] + cost){
cout << "-1" << "\n";
return;
}
}
for(int i = 2; i <= N; i++){
if(Distance[i] == INF) cout << "-1" << "\n";
else cout << Distance[i] << "\n";
}
}
void solve(){
for(int i = 1; i <= N; i++){
Distance[i] = INF;
}
Bellman_Ford();
}
int main(){
cin.tie(0);
cout.tie(0);
cin >> N >> M;
for(int i = 1; i <= M; i++){
int x, y, cost;
cin >> x >> y >> cost;
connect.push_back({{x,y}, cost});
}
solve();
return 0;
}
질문 및 조언은 댓글을 남겨주세요
'백준' 카테고리의 다른 글
백준 10159 - 저울(C++) (2) | 2023.04.25 |
---|---|
백준 1956 - 운동(C++) (0) | 2023.04.24 |
백준 2458 - 키 순서(C++) (0) | 2023.04.24 |
백준 4991 - 로봇 청소기(C++) (0) | 2023.04.23 |
백준 2234 - 성곽(C++) (2) | 2023.04.21 |