# 다익스트라 알고리즘
# 실수 했던 점
기본적으로 다익스트라 알고리즘은 각 방문지의 값을 INF로 초기화 시켜놔야 하는데
초기화를 안했다.
이문제의 경우 -INF로 해야한다
#include <iostream> #include <stdio.h> #include <cstdio> #include <cstring> #include <algorithm> #include <vector> #include <math.h> #include <queue> #include <set> #include <map> #include <list> #include <utility> #include <climits> #include <functional> #define MAX 1005 #define INF 987654321 #define MOD 1000000 #pragma warning(disable:4996) using namespace std; typedef long long ll; typedef unsigned long long ull; typedef pair<int, int> pi; typedef pair<float, float> pf; int n,a,b,c,d; int arr[MAX][MAX],djk[MAX]; bool tf[MAX]; vector<pi> v; int find_next() { int ret=-1,val=-INF; for(int i=1;i<=n;i++) if(tf[i]==false&&djk[i]>val) { val=djk[i]; ret=i; } return ret; } int main() { fill_n(&djk[0],MAX,-INF); scanf("%d",&n); for(int i=1;i<=n;i++) for(int j=1;j<=n;j++) scanf("%d",&arr[i][j]); scanf("%d%d",&a,&b); for(int i=0;i<a;i++) { scanf("%d%d",&c,&d); djk[c]=d; } for(int i=0;i<b;i++) { scanf("%d%d",&c,&d); v.push_back(make_pair(c, d)); } int tmp=find_next(); while(tmp!=-1) { tf[tmp]=true; for(int i=1;i<=n;i++) if(arr[tmp][i]!=0&&djk[i]<djk[tmp]-arr[tmp][i]) djk[i]=djk[tmp]-arr[tmp][i]; tmp=find_next(); } int ans=-INF; for(int i=0;i<v.size();i++) if(ans<djk[v[i].first]+v[i].second) ans=djk[v[i].first]+v[i].second; printf("%d",ans); return 0; }
'IT > BOJ' 카테고리의 다른 글
백준(BOJ) 13547 수열과 쿼리5 *** (0) | 2018.06.28 |
---|---|
백준(BOJ) 15807 빛영우 *** (0) | 2018.06.28 |
백준(BOJ) 10800 컬러볼 ** (0) | 2018.06.28 |
백준(BOJ) 9935 문자열 폭발 ** (0) | 2018.06.28 |
백준(BOJ) 3392 화성지도 *** (0) | 2018.06.22 |