提出 #70261263


ソースコード 拡げる

#include <bits/stdc++.h>
using namespace std;

#if __has_include(<atcoder/all>)
#include <atcoder/all>
using namespace atcoder;
#endif

#define all(x) (x).begin(), (x).end()
#define rall(x) (x).rbegin(), (x).rend()
#define fix(x) fixed << setprecision(x)
#define rep(i, start, end) for (auto i = (start); (i) < (end); (i)++)
#define repe(i, start, end) for (auto i = (start); (i) <= (end); (i)++)
#define rrep(i, start, end) for (auto i = (start); (i) >= (end); (i)--)

constexpr auto PI = 3.14159265358979;
constexpr int INF = 1e+9;
constexpr long long INFL = 1e+18;

using ll = long long;
using lld = long double;
// using mint = modint1000000007;
using mint = modint998244353;
using Pair_int = pair<int, int>;
using Pair_ll = pair<ll, ll>;
template <class T>
using Graph = vector<vector<T>>;

template <class T1, class T2>
inline auto div_floor(T1 a, T2 b)
{
    if (b < 0)
        a *= -1, b *= -1;
    if (a >= 0)
        return a / b;
    else
        return (a + 1) / b - 1;
}
template <class T1, class T2>
inline auto div_ceil(T1 a, T2 b)
{
    if (b < 0)
        a *= -1, b *= -1;
    if (a <= 0)
        return a / b;
    else
        return (a - 1) / b + 1;
}
ll pow_int(ll x, ll n)
{
    ll res = 1;
    while (n > 0)
    {
        if (n & 1)
            res *= x;
        x *= x;
        n >>= 1;
    }
    return res;
}
ll pow_mod(ll x, ll n, ll mod)
{
    ll res = 1;
    while (n > 0)
    {
        if (n & 1)
            res = res * x % mod;
        x = x * x % mod;
        n >>= 1;
    }
    return res;
}
ll gcd(ll x, ll y)
{
    if (x < y)
        swap(x, y);
    ll r;
    while (y > 0)
    {
        r = x % y;
        x = y;
        y = r;
    }
    return x;
}
ll lcm(ll x, ll y) { return ll(x / gcd(x, y)) * y; }
ll nCk(ll n, ll r)
{
    if (r < 0 || n < r)
        return 0;
    ll ans = 1;
    for (ll i = 1; i <= r; i++)
    {
        ans *= n--;
        ans /= i;
    }
    return ans;
}
int get_rand(int seed, int min, int max)
{
    static mt19937_64 mt64(seed);
    uniform_int_distribution<int> get_rand_int(min, max);
    return get_rand_int(mt64);
}
template <typename T>
inline bool chmax(T &a, T b) { return ((a < b) ? (a = b, true) : (false)); }
template <typename T>
inline bool chmin(T &a, T b) { return ((a > b) ? (a = b, true) : (false)); }
template <class T1, class T2>
inline auto mod(T1 x, T2 r) { return (x % r + r) % r; }

// ======================================== //

int main()
{
    int N;
    cin >> N;
    Graph<int> G(N);
    rep(i, 0, N - 1)
    {
        int A, B;
        cin >> A >> B;
        A--, B--;
        G[A].push_back(B);
        G[B].push_back(A);
    }

    auto get_dist = [&](int start) -> vector<int>
    {
        vector<int> res(N, -1);

        auto dfs = [&](auto &self, int now, int parent, int d) -> void
        {
            res[now] = d;
            for (auto next : G[now])
            {
                if (next == parent)
                    continue;

                self(self, next, now, d + 1);
            }
            return;
        };

        dfs(dfs, start, -1, 0);
        return res;
    };

    auto get_farthest = [&](const vector<int> &dist) -> int
    {
        int res = -1;
        int max_dist = -1;
        rep(i, 0, N)
        {
            if (dist[i] > max_dist)
            {
                res = i;
                max_dist = dist[i];
            }
            else if (dist[i] == max_dist)
            {
                chmax(res, i);
            }
        }

        return res;
    };

    vector<int> dist_0 = get_dist(0);
    int u = get_farthest(dist_0);

    vector<int> dist_u = get_dist(u);
    int w = get_farthest(dist_u);

    vector<int> dist_w = get_dist(w);

    rep(v, 0, N)
    {
        int from_u = dist_u[v];
        int from_w = dist_w[v];

        if (from_u == from_w)
        {
            cout << max(u, w) + 1 << endl;
        }
        else if (from_u < from_w)
        {
            cout << w + 1 << endl;
        }
        else
        {
            cout << u + 1 << endl;
        }
    }

    return 0;
}

提出情報

提出日時
問題 E - Farthest Vertex
ユーザ Yuulis
言語 C++ 23 (gcc 12.2)
得点 475
コード長 4047 Byte
結果 AC
実行時間 778 ms
メモリ 52016 KiB

ジャッジ結果

セット名 Sample All
得点 / 配点 0 / 0 475 / 475
結果
AC × 2
AC × 31
セット名 テストケース
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
ケース名 結果 実行時間 メモリ
00_sample_00.txt AC 1 ms 3532 KiB
00_sample_01.txt AC 1 ms 3588 KiB
01_random_00.txt AC 437 ms 23168 KiB
01_random_01.txt AC 751 ms 37684 KiB
01_random_02.txt AC 541 ms 28040 KiB
01_random_03.txt AC 760 ms 37792 KiB
01_random_04.txt AC 559 ms 28784 KiB
01_random_05.txt AC 740 ms 37776 KiB
01_random_06.txt AC 723 ms 36620 KiB
01_random_07.txt AC 757 ms 37716 KiB
02_path_00.txt AC 677 ms 51248 KiB
02_path_01.txt AC 778 ms 51984 KiB
02_path_02.txt AC 771 ms 51956 KiB
02_path_03.txt AC 770 ms 52016 KiB
03_star_1_00.txt AC 618 ms 39204 KiB
03_star_1_01.txt AC 667 ms 39212 KiB
03_star_1_02.txt AC 699 ms 39188 KiB
04_star_2_00.txt AC 673 ms 37248 KiB
04_star_2_01.txt AC 705 ms 38168 KiB
04_star_2_02.txt AC 755 ms 37232 KiB
04_star_2_03.txt AC 774 ms 43920 KiB
04_star_2_04.txt AC 769 ms 47076 KiB
05_star_3_00.txt AC 754 ms 36752 KiB
05_star_3_01.txt AC 753 ms 37196 KiB
05_star_3_02.txt AC 755 ms 37180 KiB
06_corner_00.txt AC 681 ms 47104 KiB
06_corner_01.txt AC 678 ms 47092 KiB
06_corner_02.txt AC 766 ms 46984 KiB
06_corner_03.txt AC 770 ms 47008 KiB
06_corner_04.txt AC 769 ms 46908 KiB
06_corner_05.txt AC 765 ms 46760 KiB