Submission #70304232


Source Code Expand

#include <iostream>
#include <vector>
#include <algorithm>
#include <set>
#include <map>
#include <deque>
#include <queue>
#include <numeric>
#include <stack>
#include <cassert>
#include <cstring>
#include <cmath>
#include <random>
#include <unordered_map>
#include <unordered_set>
#include <iomanip>
#include <chrono>
#include <sstream>
#include <limits>
#include <functional>
using namespace std;
#define endl '\n'
// #define LOCAL

using int64 = int64_t;
using uint64 = unsigned long long;
using int128 = __int128_t;

#ifdef LOCAL
#include "src/debug.h"
#else
#define debug(...) 42
#endif

// tree diameter
const int INF = numeric_limits<int>::max();
int N;
vector<vector<int>> adj;

vector<int> bfs(int src) {
    vector<int> dist(N, INF);
    dist[src] = 0;
    queue<int> q;
    q.emplace(src);
    while (!q.empty()) {
        int u = q.front();
        q.pop();
        for (int v : adj[u]) {
            if (dist[v] == INF) {
                dist[v] = dist[u] + 1;
                q.emplace(v);
            }
        }
    }
    return dist;
}

void solve() {
    cin >> N;
    adj.assign(N, vector<int>());
    for (int i = 0; i < N - 1; i++) {
        int u, v;
        cin >> u >> v;
        u--; v--;
        adj[u].emplace_back(v);
        adj[v].emplace_back(u);
    }
    // find farthest from node 0
    vector<int> d0 = bfs(0);
    int u = -1, maxd = -1; // handles tie break by taking larger node index
    for (int i = N - 1; i >= 0; --i) {
        if (d0[i] > maxd) {
            maxd = d0[i];
            u = i;
        }
    }
    vector<int> du = bfs(u);
    int v = -1, maxd2 = -1;
    for (int i = N - 1; i >= 0; --i) {
        if (du[i] > maxd2) {
            maxd2 = du[i];
            v = i;
        }
    }
    vector<int> dv = bfs(v);
    if (u < v) {
        swap(u, v);
        swap(du, dv);
    }
    // farthest distance from every node i
    // u is taken on ties
    for (int i = 0; i < N; ++i) {
        if (du[i] >= dv[i]) {
            cout << u + 1 << endl;
        } else {
            cout << v + 1 << endl;
        }
    }
}

signed main() {
    ios::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);
    solve();
    return 0;
}

Submission Info

Submission Time
Task E - Farthest Vertex
User therealchainman
Language C++ 20 (gcc 12.2)
Score 475
Code Size 2284 Byte
Status AC
Exec Time 188 ms
Memory 40304 KiB

Judge Result

Set Name Sample All
Score / Max Score 0 / 0 475 / 475
Status
AC × 2
AC × 31
Set Name Test Cases
Sample 00_sample_00.txt, 00_sample_01.txt
All 00_sample_00.txt, 00_sample_01.txt, 01_random_00.txt, 01_random_01.txt, 01_random_02.txt, 01_random_03.txt, 01_random_04.txt, 01_random_05.txt, 01_random_06.txt, 01_random_07.txt, 02_path_00.txt, 02_path_01.txt, 02_path_02.txt, 02_path_03.txt, 03_star_1_00.txt, 03_star_1_01.txt, 03_star_1_02.txt, 04_star_2_00.txt, 04_star_2_01.txt, 04_star_2_02.txt, 04_star_2_03.txt, 04_star_2_04.txt, 05_star_3_00.txt, 05_star_3_01.txt, 05_star_3_02.txt, 06_corner_00.txt, 06_corner_01.txt, 06_corner_02.txt, 06_corner_03.txt, 06_corner_04.txt, 06_corner_05.txt
Case Name Status Exec Time Memory
00_sample_00.txt AC 1 ms 3408 KiB
00_sample_01.txt AC 1 ms 3484 KiB
01_random_00.txt AC 90 ms 23488 KiB
01_random_01.txt AC 162 ms 38016 KiB
01_random_02.txt AC 114 ms 28116 KiB
01_random_03.txt AC 168 ms 38072 KiB
01_random_04.txt AC 120 ms 28824 KiB
01_random_05.txt AC 164 ms 37988 KiB
01_random_06.txt AC 163 ms 36948 KiB
01_random_07.txt AC 165 ms 38008 KiB
02_path_00.txt AC 104 ms 36268 KiB
02_path_01.txt AC 181 ms 37152 KiB
02_path_02.txt AC 188 ms 37180 KiB
02_path_03.txt AC 182 ms 37232 KiB
03_star_1_00.txt AC 88 ms 40304 KiB
03_star_1_01.txt AC 95 ms 40224 KiB
03_star_1_02.txt AC 127 ms 40284 KiB
04_star_2_00.txt AC 119 ms 37152 KiB
04_star_2_01.txt AC 133 ms 39292 KiB
04_star_2_02.txt AC 149 ms 37304 KiB
04_star_2_03.txt AC 153 ms 37232 KiB
04_star_2_04.txt AC 160 ms 37168 KiB
05_star_3_00.txt AC 150 ms 36676 KiB
05_star_3_01.txt AC 154 ms 37148 KiB
05_star_3_02.txt AC 146 ms 37108 KiB
06_corner_00.txt AC 101 ms 37204 KiB
06_corner_01.txt AC 101 ms 37132 KiB
06_corner_02.txt AC 162 ms 37232 KiB
06_corner_03.txt AC 164 ms 37200 KiB
06_corner_04.txt AC 160 ms 37048 KiB
06_corner_05.txt AC 160 ms 36824 KiB