수혀니와 재서기가 숨바꼭질을 할 때 가장 멀리 있는 지점 중 가장 작은 번호와, 거리, 같은 지점의 개수를 출력해주자.
가중치도 없고, 단순히 거리만 있는 문제이기에 크게 생각할 점이 없다.
최대 지점의 수가 2만이기에 인접 행렬을 사용하지 않아야 한다.
최소 거리만 저장하면 되기에 방문체크도 간단하다.
BFS이후 거리를 저장해 가장 작은 번호 출력하고, 거리, 지점을 계산한다.
#include <iostream>
#include <vector>
#include <queue>
using namespace std;
const int MAX = 20000;
vector<vector<int>> adj;
int dist[MAX];
int main()
{
ios_base::sync_with_stdio(false);
cin.tie(0);
int n, m;
queue<int> q;
cin >> n >> m;
adj.resize(n);
for (int i = 0; i < m; i++)
{
int to, des;
cin >> to >> des;
adj[to-1].push_back(des-1);
adj[des-1].push_back(to-1);
}
q.push(0);
while (!q.empty()) {
int cur = q.front();
q.pop();
int curNodeCount = adj[cur].size();
for (int i = 0; i < curNodeCount; i++) {
int next = adj[cur][i];
if (dist[next] == 0) {
dist[next] = dist[cur] + 1;
q.push(next);
}
}
}
int maxDist = 1;
for (int i = 2; i < n; i++)
if (dist[maxDist] < dist[i])
maxDist = i;
int sameCount = 0;
for (int i = 1; i < n; i++)
if (dist[maxDist] == dist[i])
sameCount++;
cout << maxDist + 1 << ' ' << dist[maxDist] << ' ' << sameCount;
return 0;
}
2019-04-21 18:36:33에 Tistory에서 작성되었습니다.