1번 노드에서 가장 먼 노드들의 수를 구하는 문제였다.
특정 정점에서 다른 노드들까지의 거리를 계산하는 문제? 다익스트라 문제다.

Dijkstra

#include <algorithm>
#include <vector>
#include <queue>
using namespace std;
#define INF 9999999
#define START 1

int dist[20001];
vector<pair<int, int>> graph[20001];
priority_queue<pair<int, int>, vector<pair<int, int>>, greater<pair<int, int>>> dijk_q;
void init_graph(int n, vector<vector<int>> vertex) {
    for (auto ver : vertex) {
        graph[ver[0]].push_back({ ver[1], 1 });
        graph[ver[1]].push_back({ ver[0], 1 });
    }
    // 주어진 node를 인접 리스트로 표현.

    for (int i = 1; i <= n; i++)
        dist[i] = INF;
    // 다익스트라를 위한 초기화 작업

    dijk_q.push({START, 0});
    dist[START] = 0;
    // 1번 node는 거리가 0
}

void dijkstra_with_pq() {
    while (!dijk_q.empty()) {
        int curr_node = dijk_q.top().first;
        int cost = dijk_q.top().second;
        dijk_q.pop();
        // 미리 넣어놓았던 시작노드 부터 정보 추출

        if (dist[curr_node] < cost) continue;
        // 만약 새 비용보다 현재 거리가 짧다면 탐색할 필요 X!

        for (int i = 0; i < graph[curr_node].size(); i++) {
            int next_node = graph[curr_node][i].first;
            int next_cost = cost + graph[curr_node][i].second;
            // 해당 노드에 연결된 다른 노드와 해당 노드까지의 거리 계산
            // next_cost는 1번노드 -> 현재 노드 -> 다음 노드까지의 거리 합

            if (next_cost < dist[next_node]) {
                // 거리 합이 기존 dist보다 작으면 교체해주어야 한다.
                dist[next_node] = next_cost;
                dijk_q.push({ next_node, next_cost });
            }
        }
    }
}

int count_max_node(int n) {
    int max_node = *max_element(dist, dist+n);
    int cnt = 0;

    for (int i = 1; i <= n; i++)
        if (dist[i] == max_node) cnt++;

    return cnt;
}

int solution(int n, vector<vector<int>> vertex) {
    int answer = 0;

    init_graph(n, vertex);
    dijkstra_with_pq();
    answer = count_max_node(n);

    return answer;
}