https://www.acmicpc.net/problem/1753
문제
- 첫째 줄에 정점의 개수 V(1 <= V <= 20000)와 E(1 <= E <= 300000) 입력.
- 둘째 줄에 시작 정점 번호 K(1 <= K <= V) 입력.
- 셋째 줄부터 E개의 줄에 각 간선을 나타나는 세 개의 정수 u, v, w (u에서 v로 가는 가중치 w인 간선이 존재한다는 의미) 입력. (u != v, w(1 <= w <= 10))
- V개의 줄에 i번째 줄에 i번 정점으로의 최저 가중치를 갖는 경로값 출력. 시작점 자신은 0, 경로 존재하지 않을 시 INF 출력.
중간 완성 코드
#include <stdio.h>
int main(void) {
int V, E, K, u, v, w, min = 20, sum = 0, temp, j = 0;
int list[3][300000];
scanf_s("%d %d", &V, &E);
scanf_s("%d", &K);
for (int i = 0; i < E; i++) {
scanf_s("%d %d %d", &u, &v, &w);
list[0][i] = u;
list[1][i] = v;
list[2][i] = w;
}
for (int i = 1; i <= V; i++) {
if (i == K) {
printf("0\n");
i++;
}
temp = i;
for (j = 0; j < E; j++) {
if (list[1][j] == temp && list[0][j] == K) {
sum += list[2][j];
if (min >= sum) {
min = sum;
}
break;
}
else if (list[1][j] == temp) {
sum += list[2][j];
temp = list[0][j];
for (int k = 0; k < E; k++) {
if (list[0][k] == K && list[1][k] == temp) {
sum += list[2][k];
if (min >= sum) {
min = sum;
}
break;
}
}
}
}
if (sum == 0) {
printf("INF\n");
}
else {
printf("%d\n", min);
}
min = 20;
sum = 0;
}
return 0;
}
답은 잘 나오는데
ㅠㅠ!!!!!!!!!!!!
대충 맞춰서 만들었더니 시간 초과가... 하... 시간 초과가 제일 고치기 힘든 것 같다...
구조를 아예 바꿔야 될 것 같은데...
...
'백준 문제 풀이 > 백준 (C)' 카테고리의 다른 글
C 백준 2720 세탁소 사장 동혁 (일반 수학) (0) | 2024.07.01 |
---|---|
C 백준 25206 너의 평점은 (심화 1) (0) | 2024.07.01 |
C 백준 1920 수 찾기 (이분탐색) (0) | 2024.06.30 |
C 백준 1026 보물 (수학) (0) | 2024.06.30 |
C 백준 11718 그대로 출력하기 (문자열) (0) | 2024.06.30 |