티스토리 뷰
ㅠ[ BOJ ] 1240번 : 노드사이의 거리
문제 : https://www.acmicpc.net/problem/1240
[ 문제 ]
개의 노드로 이루어진 트리가 주어지고 $M$개의 두 노드 쌍을 입력받을 때 두 노드 사이의 거리를 출력하라.
[ 입력 ]
첫째 줄에 노드의 개수 과 거리를 알고 싶은 노드 쌍의 개수 이 입력되고 다음 개의 줄에 트리 상에 연결된 두 점과 거리를 입력받는다. 그 다음 줄에는 거리를 알고 싶은 개의 노드 쌍이 한 줄에 한 쌍씩 입력된다.
[ 출력 ]
개의 줄에 차례대로 입력받은 두 노드 사이의 거리를 출력한다.
[ 제한 ]
- 트리 상에 연결된 두 점과 거리는 이하인 자연수이다.
- 트리 노드의 번호는 부터 까지 자연수이며, 두 노드가 같은 번호를 갖는 경우는 없다.
[ 문제 접근 및 풀이 ]
트리 상의 두 점의 거리는 1이 아닌 10,000 이하의 자연수이므로
트리를 만들 때 자식의 값과 두 점의 거리 값을 넣어주었고
이후 노드 한 쌍을 입력 받고 한 노드를 루트노드라고 생각 후 큐에 넣어
또 다른 노드와 만났을 때 거리를 출력했다.
[ 소스 코드 ]
#include<bits/stdc++.h>
using namespace std;
int N,M;
vector<pair<int,int>> tree[1001];
bool vis[1001];
void Q_1240();
int main() {
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
Q_1240();
}
void Q_1240(){
cin >> N >> M;
for (int i=0; i<N-1; i++) {
int x, y, l;
cin >> x >> y >> l;
tree[x].push_back({ y,l });
tree[y].push_back({x, l});
}
for (int i=0;i<M; i++) {
memset(vis, false, sizeof(vis));
int x, y;
cin >> x >> y;
queue<pair<int, int>> q;
q.push({ x,0 });
vis[x] = true;
while (!q.empty()) {
auto cur = q.front(); q.pop();
if (cur.first == y) {
cout <<cur.second <<"\n";
break;
}
for (auto dir : tree[cur.first]) {
if (vis[dir.first]) continue;
int len = cur.second + dir.second;
vis[dir.first] = true;
q.push({ dir.first,len });
}
}
}
}
'BOJ' 카테고리의 다른 글
[ BOJ / C++ ] 11725번 : 트리의 부모 찾기 (0) | 2025.05.18 |
---|---|
[ BOJ / C++ ] 1991번 : 트리 순회 (0) | 2025.05.18 |
[ BOJ / C++ ] 15681번 : 트리와 쿼리 (0) | 2025.05.11 |
[ BOJ / C++ ] 13244번 : Tree (0) | 2025.05.11 |
[ BOJ / C++ ] 3584번 : 가장 가까운 공통 조상 (0) | 2025.05.11 |
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 트리
- 트리를 사용한 집합과 맵
- 누적 합
- 그래프 탐색
- 정렬
- BFS
- 파싱
- 백준
- 너비 우선 탐색
- 최소 공통 조상
- 브루트포스 알고리즘
- 수학
- 슬라이딩 윈도우
- 순열 사이클 분할
- 시뮬레이션
- 스택
- 깊이 우선 탐색
- 그래프
- 분할 정복을 이용한 거듭제곱
- 해시를 사용한 집합과 맵
- C++
- 문자열
- 자료 구조
- 다이나믹 프로그래밍
- 구현
- 재귀
- 그리디 알고리즘
- 그래프 이론
- BOJ
- 트리에서의 다이나믹 프로그래밍
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
글 보관함