
๋ชฉ์ฐจ
0. ์๋ก
1. ์๊ณ ๋ฆฌ๋ฌ ์ค๋ช
2. ๋ฐฑ์ค ์ถ์ฒ ๋ฌธ์ ๋ฐ ์ฝ๋
0. ์๋ก
ํ๋ก์ด๋ ์์ (Floyd-Warshall) algorithm์ ๊ทธ๋ํ์์ ๊ฐ๋ฅํ ๋ชจ๋ ๋ ธ๋ ์์ ๋ํด ์ต๋จ ๊ฑฐ๋ฆฌ๋ฅผ ๊ตฌํ๋ ์๊ณ ๋ฆฌ๋ฌ์ด๋ค. ์๊ฐ๋ณต์ก๋๋ O(V^3)์ด๋ค. ํ์๊ฐ ์ ๋ณด์ถฉ์ด๋ผ ์๋ก ์ธ ๊ฒธ์ ๊ธฐ์ ํ์ง๋ง, ํ๋ก์ด๋ ์์ ์ ์ด ์๊ณ ๋ฆฌ๋ฌ ๊ฐ๋ฐ์์ธ "๋ก๋ฒํธ ํ๋ก์ด๋"์ "์คํฐ๋ธ ์์ "์ด ๊ฐ๋ฐํ๊ณ , ์ดํ์ ๋ก๋ฒํธ ํ๋ก์ด๋๋ ํ๋ง์์ ๋ฐ์๋ค.
"๊ฐ๋ฅํ ๋ชจ๋ ๋ ธ๋์์ ๋ํด ์ต๋จ๊ฑฐ๋ฆฌ"๋ฅผ ๊ตฌํ๋ ์๊ณ ๋ฆฌ๋ฌ์ ๋ง๋ค์ด ๋ธ ์ด์ ๋ ์ฌ์ค ์ค๋๋ ์ฝ๋ฉํ ์คํธ๋ฅผ ๋ณด๋ ์ฐ๋ฆฌ์๊ฒ ๋์ด๋๋ฅผ ์ ์ฌํ๊ธฐ ์ํจ์ ์๋๊ณ , ํต์ ๋คํธ์ํฌ๊ด๊ณ๋ฅผ ๋ถ์ํ๊ธฐ ์ํด ๋ง๋ค์ด์ง ์๊ณ ๋ฆฌ๋ฌ์ด๋ค.
์ด ์๊ณ ๋ฆฌ๋ฌ์ ๊ฐ๋ฐํ ์๊ธฐ๋ 1960๋ ๋ ์ด๋ฐ์ธ๋ฐ, ๋น์์ ๋ฏธ๊ตญ ์ผ๋ถ์ง์ญ์ ํฉ๋ฟ๋ ค์ ธ ์๋ ๋คํธ์ํฌ ๊ด๊ณ๋ง์์ ์ ์ฒด ๋ ธ๋๊ฐ ์ต์ ์ง์ฐ/๋น์ฉ์ ํ๋ฒ์ ๊ณ์ฐํด์ "๋ผ์ฐํ ๊ธฐ์คํ"๋ฅผ ๋ง๋ค๊ธฐ ์ํด ์ฐ์๋ค.
์ค์์์ ์ ์ฒด ๋คํธ์ํฌ๋ฅผ ์๊ณ ์๊ณ , ๋ชจ๋ ๋ ธ๋๊ฐ ์ต์ ๊ฒฝ๋ก์ ์ง์ฐ์๊ฐ, ๊ทธ๋ฆฌ๊ณ ๋๋ฌ ๊ฐ๋ฅ ์ฌ๋ถ๊น์ง ์ ์ ์๊ธฐ์, ํจํท์ด ๋์ฐฉํ ๋๋ง๋ค ๊ณ์ฐํ๊ฑฐ๋ ์ฌ๋ถ๋ฅผ ์๋ ๊ฒ์ด ์๋๋ผ, ํ๋ฒ ๊ณ์ฐํด ๋๋ฉด O(1)๋ก๋ค๊ฐ ๋ฝ์๋ค ์ธ ์ ์๊ธฐ์ ์ฌ์ฉํ๋ ๊ฒ ๊ฐ๋ค. ์ด์ ๊ด๋ จํด์๋ ARPA(๋ฏธ๊ตญ ๊ตญ๋ฐฉ๋ถ ์ฐํ ๊ณ ๋ฑ์ฐ๊ตฌ๊ณํ๊ตญ) ์ ARPANET์ ํจํท ๊ตํ ๋คํธ์ํฌ๋ฅผ ๋ณด๋ฉด ์ ์ ์๋ค. ์ํ๋ท์ธ์ง ์๋ฅดํ๋ท์ธ์ง ๋ชจ๋ฅด๊ฒ ๋๋ฐ, ์์ด๋ก ๊ฒ์ํ๋ ํธ์ด ๋ ์ ๋์จ๋ค.

์ํผ, ์ฝ๋ฉํ ์คํธ์์ ํ๋ก์ด๋๋ ์ ์๋์ค๋ ๋ฏ ํ์ง๋ง ์ด๋ ๊ฒ ์๊ฐ์จ์ ๊ธฐ์ ํ๋ ์ด์ ๋,
์ฌ์ค ์๋ฆฌ๋ง ๊ธฐ์ตํ๊ณ ์๋ค๋ฉด ๊ฐ๋จํ๊ฒ ํ ์ ์๋ ๋ฌธ์ ์ง๋ง, ๊ธฐ์ต์ด ์๋๋ค๋ฉด ๋ค์์ ๊ธฐ์ฝํ ์ ๋ฐ์ ์๊ฒ๋๋ ์๊ณ ๋ฆฌ๋ฌ์ด๊ธฐ์ ํ์์ ๋ณต์ต ์ฐจ ์ฒซ ์๊ณ ๋ฆฌ๋ฌ ํฌ์คํ ์ผ๋ก ์๊ฐ ํ๋ค.
1. ์๊ณ ๋ฆฌ๋ฌ ์ค๋ช
์๋ก ์์ ๋ณธ ARPANET์ ๋ณต์กํ ๋คํธ์ํฌ ๊ด๊ณ๋ฅผ ์๊ฐํ๊ณ ์๋ค๋ฉด, ๊ทธ๊ฒ์ ํ๋์ ํ ์ด๋ธ๋ก ๋ง๋๋๊ฒ ๋ง๋ค.

์ผ์ชฝ๊ณผ ๊ฐ์ด ๊ฐ๋จํ ๊ทธ๋ํ๊ฐ ์๋ค๊ณ ๊ฐ์ ํ ๋, ์ค๋ฅธ์ชฝ์ ํ ๊ทธ cost๋ฅผ ๋ฏธ๋ฆฌ ๊ณ์ฐํ๋ ๋ฐฉ๋ฒ์ด๋ค.
์ฌ๋ด์ด์ง๋ง, ํ์๋ ๋ธ๋ก๊ทธ ๊ทธ๋ฆผ ํธ์ง์ figma๋ก ํ๋๋ฐ, ์ฌ๊ธฐ์๋ ์ ๋ง ๋์ฐํ๊ฒ๋ ํ๊ฐ ์๋ค. ๊ฐ์์ฑ์ ์ํด ๋ฐ๋๋ค.
์ฐ์ , ๋ณธ์ธ ๋ ธ๋์์ ๋ณธ์ธ์ผ๋ก ๊ฐ๋ cost๋ 0์ด๊ณ , ํ์ฌ ๊ทธ๋ํ์์๋ ๋ชจ๋ ์๋ฅผ ํ๋ฒ์ ๊ฐ ์ ์์ผ๋, ์ต๋จ๊ฑฐ๋ฆฌ๋ฅผ ๊ณ ๋ คํ์ง ์๊ณ ์ฝ์คํธ๋ฅผ ๊ณ์ฐํ๋ค๋ฉด,

์ด๋ ๊ฒ ๋์นญ์ ์ธ ํ๊ฐ ๋์จ๋ค.
ํ์ง๋ง, ์ผ๋ถ ๊ฒฝ์ฐ๋ ๋ค๋ฅธ ๋ ธ๋๋ฅผ ๊ฒฝ์ ํด ๊ฐ๋ ๊ฒฝ์ฐ๊ฐ ๋ cost๊ฐ ์ ์ ๊ฒฝ์ฐ๊ฐ ๋ฐ์ํ๋ค.
์ด๋ฅผํ ๋ฉด, 2 - 4 ์ธ ๊ฒฝ์ฐ์๋, ์ผ์ง์ ์ผ๋ก ๊ฐ๋ฉด 8 cost๊ฐ ๋ฐ์ํ์ง๋ง, 3์ ๊ฑฐ์น๊ฒ ๋๋ฉด 5 + 2์์ 7์ cost๋ง์ผ๋ก ์ ๊ทผํ ์ ์๊ธฐ ๋๋ฌธ์ด๋ค.

์ด๋ ๊ฒ, ๋นจ๊ฐ์์ผ๋ก ๋ฐ๋ ๋ถ๋ถ์ด, ๋ ๋น ๋ฅธ ๊ฒฝ๋ก๋ฅผ ์ฐพ์ ๋ฐ๊พผ ๊ฒฝ์ฐ๋ค.
์ด์ ์ด๋ฌํ ๊ฒฝ์ฐ๋ฅผ ์ฑ์ฐ๋ฉด ๋๋๋ฐ, ์ด๋ฅผ 3์ค for๋ฌธ์ผ๋ก ๊ตฌํํ๋ค.
#define INF 1e9
int N;
vector<vector<int>> table;
vector<vector<int>> costs;
void main() {
int a,b,c;
cin >> N;
table.resize(N+1, vector<int>(N+1, INF);
costs.resize(N+1, vector<int>(N+1, INF);
for(int i = 0; i < N; ++i) {
cin >> a >> b >> c;
table[a][b] = min(c, table[a][b]);
table[b][a] = min(c, table[b][a]);
}
for(int k = 1; k < N+1; ++k) {
for(int i = 1; i < N+1; ++i) {
for(int j = 1; j < N+1; ++j) {
table[i][j] = min(table[i][k] + table[k][j] , table[i][j]);
}
}
}
return 0;
}
ํญ์ด ์ข ์ด์ํ๋ฐ์ ๋ค์ด๊ฐ์๋๋ฐ, ์ด๊ฑด tistory ์ฝ๋๋ธ๋ญ์์ ์ฝ๋๋ฅผ ์ฐ๊ฒ ๋๋ฉด ์ค๋ฅ๋ก ํญ์ด ๋ค์ด๊ฐ๋ ๋ฏ ํ๋ค.
๋ํ, INF์์ 1e9๋ฅผ ์ฌ์ฉํ ์ด์ ๋, min์์ ๋ํ๊ธฐ ํ ๋, 0x7fffffff์ ์ฐ๋ฉด, overflow๊ฐ ๋ฐ์ํ๊ธฐ ๋๋ฌธ์ด๋ค.
๋ํ, ์ ๋ ฅ์์ min์ ์ฐ๋ ์ด์ ๋ํ, ๊ฐ์ ๋ฐฉํฅ์ ๋ํด ์ฌ๋ฌ ๊ฐ์ ์ด ์กด์ฌํ ์ ์๊ธฐ ๋๋ฌธ์ด๋ค.
for๋ฌธ์ ๋ฌธ์ ์์์ ์ฃผ์ํด์ผํ๋ค!
ํ๋ก์ด๋์ ์๋๋,
1. ์ง์ ์ฐ๊ฒฐ๋ ๊ฐ์ ๋ง ์๊ณ ์์ ๋,
2. ๋ค๋ฅธ ์ง์ ์ ๊ฒฝ์ ํ๋ ๊ฒฝ์ฐ๊ฐ ๋ ํจ์จ์ ์ผ๋
3. ํด๋น ์ง์ ์ ๊ฒฝ์ ํ๋ค.
์ด๋ฐ ์ฌ๊ณ ์ด๊ธฐ ๋๋ฌธ์,
์ ์ฝ๋์์ ๊ฒฝ์ ์ง์ธ k๋ฅผ ๊ฒฝ์ ์ง๋ก ์ผ์ ๋, "i์์ j๋ก ๊ฐ๋ ๊ฒฝ์ฐ"์ ์ํ๋ฅผ ๋ฐ์ ์ ์๋์ง ๊ณ์ฐํ
๋ ์๊ณ ๋ฆฌ์ฆ์ด๋ค.
์ฐธ๊ณ ๋ก ๊ธฐ์ ํ์๋ฉด, ์ ์ฝ๋์์ i, j, k ์์ผ๋ก ์์ฑํ์ฌ, "i์์ j๋ก ๊ฐ ๋, k๋ฅผ ๊ฒฝ์ ํด๋ ๋๋๊ฐ?"๋ฅผ ๋๊ณ ์ฝ๋ฉ์ ํ๊ฒ๋๋ฉด, ์ด ๋ก์ง์ ๋๋ฒ ์ด์ ๋๋ ค์ผํ๋ ๋ถ์์ฌ๊ฐ ๋ฐ์ํ๋๋ฐ,
๋ง์ผ ์์ ์ฝ๋๊ฐ ๊ฒฝ์ฐ A, " i์์ j๋ก ๊ฐ ๋, k๋ฅผ ๊ฒฝ์ ํด๋ ๋๋๊ฐ?"๊ฐ ๊ฒฝ์ฐ B๋ผ๊ณ ๊ฐ์ ํ์ ๋,
๊ฒฝ์ฐ A๋ ๊ฒฝ์ ์ง๋ฅผ ๊ธฐ์ค์ผ๋ก ์์์ ๊ณผ ๋์ ์ ๊ณ์ฐํ๊ธฐ์, ๋ชจ๋ ๊ฒฝ์ฐ์ ๋ํด ๋น ์ง์์ด ๊ณ์ฐํ ์ ์์ผ๋,
๊ฒฝ์ฐ B๋ "์๋ก์ด ๊ฒฝ์ ์ง๊ฐ ๋ซ๋ฆฌ๋ฉฐ ๋ฐ์ํ๋ ์๋ก์ด ๊ฒฝ์ฐ"๋ฅผ ๊ณ์ฐํ์ง ๋ชปํ๊ธฐ ๋๋ฌธ์ด๋ค.
๊ฒฝ๋ก ๋ณต์์ ๋ํด์๋ ๋ค์ ๊ธ์์ ์ด์ด์ ๊ธฐ์ ํ๊ฒ ๋ค.
(๋งํฌ ์ฒจ๋ถ ์์ )
2. ๋ฐฑ์ค ์ถ์ฒ๋ฌธ์ ๋ฐ ์ฝ๋
https://www.acmicpc.net/problem/11403
์ค๋ฒ ๋ฌธ์ ์ธ๋ฐ, ํ๋ฒ ํ์ด๋ณด๋ฉฐ ๊ฐ์ ์ตํ๋ณด๊ณ ,
https://www.acmicpc.net/problem/11404
๊ณจ๋ ํ์๊ถ ๋ฌธ์ ๋ฅผ ํตํด table์ ์ง๋ณด๋ ์ฐ์ต ํ์
https://www.acmicpc.net/problem/11780
์กฐ๊ธ ์ด๋ ค์ด ํ๋ก์ด๋๊น์ง ํ๋ฉด ๋ ๋ฏ ํ๋ค.
๊ฐ ๋ฌธ์ ์ ๋ํด์๋ ํ์ด๋ฅผ ์ฌ๋ฆด ์์ ์ด๋ค.
26.02.11 ์งํ