Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- const
- 백준
- C
- 프로그래머스
- DirectX11
- 1563
- IFileDialog
- RVO
- Frustum
- C++
- DeferredRendering
- 2294
- 티스토리챌린지
- winapi
- UnrealEngine5
- softeer
- Unreal Engine5
- 오블완
- Programmers
- 줄 세우기
- 언리얼엔진5
- RootMotion
- baekjoon
- NRVO
- UnrealEngine4
- GeeksForGeeks
- directx
- 팰린드롬 만들기
- algorithm
- UE5
Archives
- Today
- Total
Game Develop
[Algorithm]Baekjoon 14938번 :: 서강그라운드 본문
https://www.acmicpc.net/problem/14938
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
|
#define MAX_NUM 0x3f3f3f3f
struct Node
{
int node;
int remainingDistance; // 잔여 거리 저장.
};
int items[101]; // 0 -> 0번째 노드가 가지고있는 아이템 수.
int adjMatrix[101][101] = { 0 };
int n, m, r, a, b, l;
bool visited[101];
int main()
{
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
cin >> n >> m >> r;
memset(adjMatrix, 0x3f, sizeof(adjMatrix));
for (int i = 1; i <= n; i++) // 각 구역의 아이템 수
{
cin >> items[i];
adjMatrix[i][i] = 0;
}
for (int i = 0; i < r; i++)
{
cin >> a >> b >> l;
adjMatrix[a][b] = l;
adjMatrix[b][a] = l;
}
for (int k = 1; k <= n; k++)
{
for (int i = 1; i <= n; i++)
{
if (adjMatrix[i][k] != MAX_NUM)
{
for (int j = 1; j <= n; j++)
{
if (adjMatrix[i][k] + adjMatrix[k][j] < adjMatrix[i][j])
{
adjMatrix[i][j] = adjMatrix[i][k] + adjMatrix[k][j];
}
}
}
}
}
int result = 0;
for (int i = 1; i <= n; i++)
{
int temp = 0;
for (int j = 1; j <= n; j++)
{
if (adjMatrix[i][j] <= m)
{
temp += items[j];
}
}
result = max(result, temp);
int asdf = 0;
}
cout << result;
}
|
cs |
이 문제에서는 딱 한가지만 명심해야할 것은, 기준점으로 잡은 노드에서의 다른 노드까지의 거리가 인풋으로 주어지는 값 그대로가 아니라는 것이다.
인풋으로 1 5 7 이렇게 주어졌을 때, 1번에서 5번노드까지의 거리가 7이라는 뜻인데 이건 더 짧게 갱신될 여지가 있기 때문에 다익스트라나 플로이드와샬을 이용해서 각 노드까지의 값을 업데이트 해줘야 한다.
이 문제같은 경우는 모든 노드에 대해서 다 검사를 해야하기 때문에 그냥 플로이드와샬로 푸는게 제일 깔끔하다.
다익스트라는 한번 돌릴때마다 하나의 노드에대해서 다른 모든 노드까지의 최단거리가 업데이트 되고, 플로이드 와샬은 그냥 모든 노드에 대해서 다른 모든 노드까지의 최단거리가 업데이트된다.
그렇기 때문에 플로이드와샬로 푸는게 편하고 깔끔하다.
플로이드와샬로 각 노드에서 노드까지의 최단거리를 모두 업데이트 한 후, 각 노드를 기준으로 수색범위 이내의 노드의 아이템개수값을 갱신시킨 후, 최종 최대값을 출력해주면 된다.
'Algorithm > Baekjoon' 카테고리의 다른 글
[Algorithm]Baekjoon 1238번 :: 파티 (0) | 2022.12.22 |
---|---|
[Algorithm]Baekjoon 17144번 :: 미세먼지 안녕! (1) | 2022.12.21 |
[Algorithm]Baekjoon 14502번 :: 연구소 (0) | 2022.12.20 |
[Algorithm] Baekjoon 3944번 : 나머지 계산 (0) | 2022.12.18 |
[Algorithm] Baekjoon 11054번 : 가장 긴 바이토닉 부분수열 (0) | 2022.12.16 |