๋ฐฑ์ค 5972 : ํ๋ฐฐ ๋ฐฐ์ก
https://www.acmicpc.net/problem/5972
์ ๊ทผ ๋ฐฉํฅ ๋ฐ ๋๋ฒ๊น
[1] ์ต์ด ์ ๊ทผ
- N * N ๋ฐฐ์ด์ ๋ง๋ค์ด ์ ์ ๋ณ๋ก ์ฐ๊ฒฐ๋ ์ ์ ๊ณผ์ ๊ฑฐ๋ฆฌ๋ฅผ ํ์ํ๊ณ , ์ดํ ์ฐ์ ์์ํ์ Visited ๋ฐฐ์ด์ ์ฌ์ฉํด ํ์์ ์งํํ๊ณ ์ ํจ
- ํด๋น ์ ๊ทผ์ผ๋ก TC ๋ต์ ๋์์ผ๋, ๋ฉ๋ชจ๋ฆฌ๊ฐ 128 MB ๋ก ์ ํ๋์ด ์์ด์ ์ฝ 3% ๋๋ถํฐ ๋ฉ๋ชจ๋ฆฌ ํฐ์ง
- ๋น์ฐํจ.. N ์ ์ต๋๊ฐ์ด 50000 ์ด๋ผ๋ ์ ์ ์ ๋๋ก ํ์ธํ์ง ์์
[2] ์์ ๋ ์ ๊ทผ
- ๋๊ฐ์ด 2์ฐจ์ ๋ฐฐ์ด์ ๋ง๋ค๋, N * N ์ด ์๋ N * n (ํด๋น ์ ์ ๊ณผ ์ฐ๊ฒฐ๋ ์ ์ ์ ์) ๋ก ์์
- ๊ฐ ์ ์ ์ ๋๋ฉด์ ์ฐ๊ฒฐ๋ ๋ชจ๋ ์ ์ ์ ํ์ธํ๋ ๋ฐฉ์์ผ๋ก ์งํ
- ์ฑ๊ณต
์ฝ๋
/*
1, 2, 3 ์ฐจ: ์ปดํ์ผ ์๋ฌ (limits ๋์ climits ์ฌ์ฉํ๋ ok)
4์ฐจ: ๋ฉ๋ชจ๋ฆฌ ์๋ฌ (3%) -> INT_MAX ์ ๊ฑฐ
5์ฐจ: ๋ฉ๋ชจ๋ฆฌ ์๋ฌ (3%) -> priority queue ์ ๊ฑฐ
6์ฐจ: ๋ฉ๋ชจ๋ฆฌ ์๋ฌ (3%) -> 2์ฐจ์ ๋ฐฐ์ด์ด ๋ฌธ์ ์ธ ๊ฑธ ๊นจ๋ซ๊ณ ๋ก์ง ์์
7์ฐจ: ์ฑ๊ณต!! (5240KB, 88ms)
*/
/* 7์ฐจ ์๋ */
#include <stdio.h>
#include <iostream>
#include <vector>
#include <queue>
#include <utility>
#include <climits>
using namespace std;
int main() {
freopen("input.txt", "r", stdin);
int N, M;
cin >> N >> M;
vector<vector<pair<int, int>>> arr(N + 1);
for (int i = 0; i < M; i++) {
int A, B, C;
cin >> A >> B >> C;
arr[A].push_back(make_pair(B, C));
arr[B].push_back(make_pair(A, C));
}
vector<int> res(N + 1, INT_MAX);
priority_queue<pair<int, int>> q;
q.push(make_pair(0, 1));
res[1] = 0;
while (!q.empty()) {
pair<int, int> tmp = q.top(); q.pop();
int cur = tmp.second;
int dist = tmp.first;
for (int i = 0; i < arr[cur].size(); i++) {
int nextNode = arr[cur][i].first;
int nextDist = arr[cur][i].second;
if (res[cur] + nextDist < res[nextNode]) {
res[nextNode] = res[cur] + nextDist;
q.push(make_pair(nextDist * -1, nextNode));
}
}
}
cout << res[N];
return 0;
}
/* 4์ฐจ ์๋
#include <stdio.h>
#include <queue>
#include <vector>
#include <iostream>
#include <climits> // INT_MAX
#include <utility>
using namespace std;
int main() {
//freopen("input.txt", "r", stdin);
int N, M;
cin >> N >> M;
vector<vector<int>> arr(N + 1);
for (int i = 1; i <= N; i++) {
arr[i].resize(N + 1, -1);
}
for (int i = 0; i < M; i++) {
int A, B, C;
cin >> A >> B >> C;
arr[A][B] = C;
arr[B][A] = C;
}
vector<int> res(N + 1, INT_MAX);
vector<int> V(N + 1, 0);
priority_queue<pair<int, int>> q;
q.push(make_pair(0, 1));
while (!q.empty()) {
pair<int, int> cur = q.top(); q.pop();
int dist = cur.first * -1;
int node = cur.second;
V[node] = 1;
for (int i = 1; i <= N; i++) {
if (V[i]) continue;
if (arr[node][i] == -1) continue;
int minDist = res[i];
int curDist = dist + arr[node][i];
if (curDist < minDist) {
res[i] = curDist;
q.push(make_pair(-curDist, i));
}
}
}
cout << res[N];
return 0;
}
*/
๋ฐฐ์ด ์
- ๋ฌธ์ ํ์ด ์ ์ ์๊ฐ ๋ณต์ก๋, ๊ณต๊ฐ ๋ณต์ก๋๋ฅผ ์ ํํ ์ ๊ณ์ฐํด๋ณด์.. ๋ ์ด์ ํ์ด์ฌ ์ ์ด๋ค C++ ์ด๋ค
'๐ป DEV > Algorithms & Data Structure' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[์๊ณ ๋ฆฌ์ฆ][C++] ์ธ๊ทธ๋จผํธ ํธ๋ฆฌ (0) | 2024.03.13 |
---|---|
[์๊ณ ๋ฆฌ์ฆ][C++] ์ฐ์ ์์ํ, ํํ (0) | 2024.03.11 |
[Algorithms] ์๊ฐ๋ณต์ก๋ (Big-O Notation) ๋? (0) | 2021.07.08 |
[Data Structure] ์คํ(Stack) ๊ณผ ํ(Queue) (0) | 2021.07.07 |
[Algorithm] ๊น์ด์ฐ์ ํ์(DFS) ๊ณผ ๋๋น์ฐ์ ํ์(BFS) (0) | 2021.06.30 |
๋๊ธ