레벨별 순회 후 리프노드 중 가장 적은 번호의 노드를 리턴한다.
bfs를 사용.
#include <stdio.h>
#include <vector>
#include <queue>
#include <algorithm>
using namespace std;
int n, m;
vector<int> v[20001];
int visited[20001];
queue<int> q;
int main(void)
{
scanf("%d%d", &n, &m);
for (int i = 0; i < m; i++)
{
int a, b;
scanf("%d%d", &a, &b);
v[a].push_back(b);
v[b].push_back(a);
}
q.push(1);
visited[1] = 1;
vector<int> ans;
while (!q.empty())
{
int cur = q.front();
q.pop();
for (auto a : v[cur])
{
if (visited[a] == 0)
{
q.push(a);
visited[a] = visited[cur] + 1;
}
}
}
int max = 0, cnt = 0, res = 0;
for (int i = 2; i <= n; i++)
{
if (visited[i] > max)
{
res = i;
max = visited[i];
cnt = 1;
}
else if (visited[i] == max)
{
cnt++;
}
}
printf("%d %d %d\n", res, visited[res] - 1, cnt);
return 0;
}
'알고리즘 문제풀이 > 백준' 카테고리의 다른 글
[백준 14588] Line Friends (Small) (0) | 2021.01.02 |
---|---|
[백준 2015] 수들의 합 4 (0) | 2021.01.01 |
[백준 2262] 토너먼트 만들기 (0) | 2020.12.31 |
[백준 20310] 타노스 (0) | 2020.12.31 |
[백준 17392] 우울한 방학 (0) | 2020.12.31 |
댓글