레야몬
[C++] 1167번 트리의 지름 - 그래프 이론, BFS 본문
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
vector<vector<pair<int, int>>> v;
vector<bool> visit; //방문했던 노드
int T, p, dis; //정점의 개수 T, 최대 지점 노드, 거리
void dfs(int node, int cnt)
{
if(visit[node])
return;
visit[node]=1; //갔다 온 곳은 메모하기
for(auto k : v[node])
dfs(k.first, cnt+k.second); //다음 노드와 총 거리 넣어주기
if(dis < cnt) {
dis = cnt;
p = node;
}
}
int main()
{
ios_base::sync_with_stdio(false);
cout.tie(NULL); cin.tie(NULL);
int n, k, a, b;
cin >> T;
v.resize(T+1);
for(int i=0; i<T; i++) {
cin >> k >> a;
while(a!=-1) {
cin >> b;
v[k].push_back({a, b});
cin >> a;
}
}
visit.resize(T+1, 0);
dfs(1, 0);
fill(visit.begin(), visit.end(), 0);
dis=0;
dfs(p, 0);
cout << dis;
}
그래프를 어떻게 구현해야 할지 처음에 몰라서 많이 고민했다. 물론 다른 블로그를 보고 간신히 풀 수 있었다. 아마 이 문제를 풀면서 제일 이해가 안됬던 부분은 이진 트리인지 아닌지였다. 알고보니 이 문제는 딱히 트리를 구현해서 푸는 문제는 아닌 듯 하다. 뭐, 어찌됬던...
<C++ push_back()>
https://shaeod.tistory.com/574
[C++ STL] std::vector - push_back
※ 요약 std::vector의 멤버 함수인 push_back에 대한 내용이다. 멤버 함수 push_back은 vector의 끝에 요소를 추가할때 사용하는 함수며, 이번 포스팅에서는 C++03과 C++11에서의 사용방법에 대해 간단히 알
shaeod.tistory.com
<C++ fill()>
https://twpower.github.io/121-usage-of-fill-function
[C++] fill 함수 사용하기
Practice makes perfect!
twpower.github.io
<C++ vector의 크기 .size>
https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=hbom20&logNo=221364679628
[C++] vector의 크기 :: sizeof 와 .size()
C++의 vector 크기에 대해서 알아보겠습니다.공간 5개가 있는 벡터 space를 선언해주고, 각각 sizeof와 ve...
blog.naver.com
※현재 고등학교 등교중인 학생입니다. 이제 알고리즘을 본격적으로 공부하기 시작해서 아직 초보입니다. 혹시 제가 잘못 알고있는 점이나 더 좋은 풀이 방법이 있어 댓글에 남겨주시면 감사히 하나하나 열심히 읽어보겠습니다. 좋아요, 단순한 댓글 한마디라도 저에겐 큰 힘이 됩니다! 감사합니다.
'알고리즘 > 백준' 카테고리의 다른 글
[C++] 1753번 최단경로 - 다익스트라 (0) | 2022.09.01 |
---|---|
[C++] 1629번 곱셈 - 수학, 분할 정복 (0) | 2022.08.31 |
[C++] 18870번 좌표 압축 - 정렬, 값/좌표 압축 (0) | 2022.08.31 |
[C언어] 11726번 2×n 타일링 - DP, 행렬 (0) | 2022.08.30 |
[C++] 11724번 연결 요소의 개수 - 그래프 이론, BFS, DFS (0) | 2022.08.30 |