- ์ฌ๊ท
- ๋ค์ต์คํธ๋ผ
- DFS
- ๋นํธ๋ง์คํน
- Python
- ์๊ณ ๋ฆฌ์ฆ
- ์นด์นด์ค2021
- nestjs
- ์ํฐ๋
- Union-Find
- ๊ฐ์ฅ๊ฐ๊น์ด๊ณตํต์กฐ์
- LCs
- ํ๋ก๊ทธ๋๋จธ์ค
- go
- ์นด์นด์ค ์ฝํ
- DP
- js
- ํ๋ฆฌ์จ๋ณด๋ฉ
- ๋ฐฑ์ค
- ๋นํธ๋งต
- ์์ฝ๋
- BFS
- ์ฌ๋ผ์ด๋ฉ ์๋์ฐ
- ํธ๋ฆฌ
- C++
- ์น๋ฆฐ์ด
- ์ด๋ถํ์
- ๋์ ํ๋ก๊ทธ๋๋ฐ
- ๋ฐฑ์๋ ํ๋ฆฌ์จ๋ณด๋ฉ
- golang
- Today
- Total
Hello Ocean! ๐ผ
[๋ฐฑ์ค/C++] 1967. ํธ๋ฆฌ์ ์ง๋ฆ ๋ณธ๋ฌธ
๋ฌธ์
https://www.acmicpc.net/problem/1967
ํ์ด
์ฒ์์ ๋ฌธ์ ๋ฅผ ๋ดค์ ๋, ์ด๋ค ์๊ณ ๋ฆฌ์ฆ์ ์ด์ฉํด์ผ ํ๋์ง ๊ฐ์ด ์ค์ง ์์๋ค. ๊ทธ๋์ ๊ฒ์์ ์ข ํด๋ณด์๋๋ฐ, ๊ณต์์ฒ๋ผ ํธ๋ฆฌ์ ์ง๋ฆ์ ๊ตฌํ๋ ์๊ณ ๋ฆฌ์ฆ์ด ์กด์ฌํ๊ณ , ํด๋น ์๊ณ ๋ฆฌ์ฆ์ ์ฆ๋ช ํด๋์ ๊ธ๋ค๋ ๋ง์๋ค.
https://blog.myungwoo.kr/112 (์ฐธ๊ณ ํ ๋ธ๋ก๊ทธ)
[ํธ๋ฆฌ์ ์ง๋ฆ ์๊ณ ๋ฆฌ์ฆ]
1. ์์์ ์ ์ x๋ฅผ ์ก๋๋ค. (๋ณดํต ๋ฃจํธ๋ก ์ก์)
2. x์์ ๊ฐ์ฅ ๋จผ ์ ์ y๋ฅผ ์ฐพ๋๋ค.
3. y์์ ๊ฐ์ฅ ๋จผ ์ ์ z๋ฅผ ์ฐพ๋๋ค.
4. ์ง๋ฆ์ y-z ์ฌ์ด์ ๊ฒฝ๋ก(๊ฑฐ๋ฆฌ)์ด๋ค.
๊ทธ์น๋ง ๋ด ๋จธ๋ฆฌ๋ก๋ ๊ธ๋ก ๋ ์ฆ๋ช ์ ์ดํดํ ์ ์์ด์ ์ง์ ๊ทธ๋ฆผ์ ๊ทธ๋ ค๋ณด์๋๋ ์ดํด๊ฐ ๋์๋ค!
์๋ ์ฌ์ง๊ณผ ๊ฐ์ ํธ๋ฆฌ๊ฐ ์๋ค๊ณ ํ์! ๊ทธ๋ฆผ์ ํ์ํ y-z๊ฐ ํธ๋ฆฌ์ ์ง๋ฆ์ด๋ค.
๋ฃจํธ๋ฅผ x๋ก ์ก๊ณ ๋ฃจํธ์์ ๊ฐ์ฅ ๋จผ ์ ์ y๋ฅผ ์ฐพ๊ณ , y์์ ๊ฐ์ฅ ๋จผ ์ ์ z๋ฅผ ์ฐพ์ผ๋ฉด ๋๋ค.
๊ทธ๋ฌ๋ฉด ์ด์ , ๊ฐ์ ํธ๋ฆฌ์์ ์งํ ์ด๋ก์ ๋ ธ๋๋ฅผ ๋ฃจํธ๋ก ๋ง๋ค์ด๋ณด์
๊ทธ๋ฌ๋ฉด ์๋ ๊ทธ๋ฆผ๊ณผ ๊ฐ์ ๋ชจ์์ด ๋๋ค. ์ด๋ฐ ๋ชจ์์ ํธ๋ฆฌ์์๋ ์ญ์ ๋ฃจํธ๋ฅผ x๋ก ์ก์ผ๋ฉด,
x์์ ๊ฐ์ฅ ๋จผ z๋ฅผ ์ฐพ๊ฒ๋๊ณ , z์์ ๊ฐ์ฅ ๋จผ y๋ฅผ ๊ตฌํด์ z-y์ฌ์ด์ ๊ฑฐ๋ฆฌ๊ฐ ์ง๋ฆ์ด ๋๋ค.
์ฆ๋ช ์ด ์ข ์ด์ํ๊ฑฐ ๊ฐ๊ธด ํ์ง๋ง, ๋๊ฐ ๊ทธ๋ฆผ์ ๊ทธ๋ ค๋ณด๋ ๋ง๋ ์ฆ๋ช ์ธ๊ฑฐ ๊ฐ๋ค! ๋ผ๋๊ฒ ๊ฒฐ๋ก ์ด๋ค..ใ ใ
๊ทธ๋์ ์ด์ ์์ ์๊ณ ๋ฆฌ์ฆ์ ๊ตฌํํด์ผ ํ๋๋ฐ, DFS๋ฅผ ์ด์ฉํด์ ๊ตฌํํ ์ ์๋ค.
๋ฌธ์ ์ ๋ฃจํธ๋ ธ๋๋ ํญ์ 1์ด๋ผ๊ณ ์ ํด์ฃผ์์ผ๋๊น
1๋ถํฐ DFS๋๋ ค์ ๊ฐ์ฅ ๋จผ ๋ ธ๋๋ฅผ ์ฐพ๊ณ , ์ด๋ ๊ฒ ์ฐพ์ ๊ฐ์ฅ ๋จผ ๋ ธ๋๋ก๋ถํฐ ๋ค์ DFS๋ฅผ ๋๋ฆฌ๋ฉด, ๋ ์ฌ์ด์ ๊ฑฐ๋ฆฌ๊ฐ ์ ๋ต์ด๋ค.
์ฝ๋
#include <iostream>
#include <vector>
using namespace std;
int N;
vector<pair<int,int>> graph[10001];
bool visited[10001] = { 0, };
int maxCost=0;
int node;
void DFS(int start, int cost) {
visited[start] = 1;
for (int i = 0;i < graph[start].size();i++) {
if (!visited[graph[start][i].first]) {
DFS(graph[start][i].first, cost+graph[start][i].second);
if (cost+graph[start][i].second > maxCost) {
maxCost = cost+graph[start][i].second;
node = graph[start][i].first;
}
}
}
}
int main() {
cin >> N;
for (int i = 0;i < N-1;i++) {
int parent, child, cost;
cin >> parent >> child >> cost;
graph[parent].push_back(make_pair(child, cost));
graph[child].push_back(make_pair(parent, cost));
}
DFS(1,0); //root์์ dfs
//์ด๊ธฐํ
maxCost = 0;
fill(&visited[0], &visited[10001],0);
// root์์ ๊ฐ์ฅ ๋จผ node๋ถํฐ ๋ค์ dfs
DFS(node, 0);
int result = maxCost;
cout << result << endl;
return 0;
}
๊ฒฐ๊ณผ
'Algorithm' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๋ฐฑ์ค/C++] 3584. ๊ฐ์ฅ ๊ฐ๊น์ด ๊ณตํต์กฐ์ (0) | 2021.07.06 |
---|---|
[๋ฐฑ์ค/C++] 5052. ์ ํ๋ฒํธ ๋ชฉ๋ก (0) | 2021.07.06 |
[๋ฐฑ์ค/C++] 1600. ๋ง์ด ๋๊ณ ํ ์์ญ์ด (0) | 2021.06.29 |
[๋ฐฑ์ค/C++] 1194. ๋ฌ์ด ์ฐจ์ค๋ฅธ๋ค, ๊ฐ์ (0) | 2021.06.02 |
[๋ฐฑ์ค/C++] 2250. ํธ๋ฆฌ์ ๋์ด์ ๋๋น (0) | 2021.06.02 |