提出 #34578554


ソースコード 拡げる

#include"bits/stdc++.h"

using namespace std;

const int N = 201000;

vector<int> g[N];
int d[N];
int n, st, ed, c, flag;
int inz[N];
vector<int> zz;
int ff[N], f[N][20];
int dis[N], dt[N];


void dfs(int x, int fa) {
    for (int y: g[x]) {
        if (y == fa) continue;
        d[y] = d[x] + 1;
        if (d[y] > d[c]) c = y;
        dfs(y, x);
    }
}

void dfs2(int x, int fa) {
    // cout << "!" << x << " " << fa << " " << ed << endl;
    if (x == ed) {
        inz[x] = zz.size();
        zz.push_back(x);
        flag = 1;
        return;
    }
    for (int y: g[x]) {
        if (y == fa) continue;
        dfs2(y, x);
        if (flag) {
            inz[x] = zz.size();
            zz.push_back(x);
            return;
        }
    }
}

void dfs3(int x, int fa, int ss, int dep=0) {
    dt[x] = ss;
    dis[x] = dep;
    f[x][0] = fa;
    for (int y: g[x]) {
        if (y == fa || inz[y] != -1) continue;
        dfs3(y, x, ss, dep+1);
    }
}

int main() {
    // freopen("F.in" , "r" , stdin);
    // freopen("F.out" , "w" , stdout);
    cin >> n;
    for (int i = 1; i <= n; ++i) inz[i] = -1;
    for (int i = 1; i < n; ++i) {
        int x, y;
        cin >> x >> y;
        g[x].push_back(y);
        g[y].push_back(x);
    }
    dfs(1, 0);
    // for (int i = 1; i <= n; ++i) cout << d[i] << " ";cout << endl;
    d[c] = 0;
    st = c;
    dfs(c, 0);
    // for (int i = 1; i <= n; ++i) cout << d[i] << " ";cout << endl;
    ed = c;
    flag = 0;
    // cout << st << " " << ed << endl;
    dfs2(st, 0);
    for (int i = 0; i < zz.size(); ++i) {
        dfs3(zz[i], zz[i], zz[i]);
    }
    for (int j = 1; j < 20; ++j) {
        for (int i = 1; i <= n; ++i) {
            f[i][j] = f[f[i][j-1]][j-1];
        }
    }
    // for (int i = 0; i < zz.size(); ++i) cout << zz[i] << " ";cout << endl;
    // for (int i = 1; i <= n; ++i) cout << inz[i] << " ";cout << endl;
    int Q;
    cin >> Q;
    for (; Q; --Q) {
        int x, k;
        cin >> x >> k;
        if (k <= dis[x]) {
            int ans = x;
            for (int i = 19; i >= 0; --i) {
                if (k >= (1<<i)) {
                    ans = f[ans][i];
                    k -= (1<<i);
                }
            }
            cout << ans << endl;
        } else {
            k -= dis[x];
            int ans = dt[x];
            int idx = inz[ans];
            // cout << idx << " " << k << endl;
            if (idx >= k) {
                cout << zz[idx - k] << endl;
            } else if (zz.size()-idx-1 >= k) {
                cout << zz[idx + k] << endl;
            } else {
                cout << -1 << endl;
            }
        }
    }
    return 0;
}

提出情報

提出日時
問題 F - Exactly K Steps
ユーザ ZzZZCHS
言語 C++ (GCC 9.2.1)
得点 500
コード長 2777 Byte
結果 AC
実行時間 611 ms
メモリ 46416 KiB

コンパイルエラー

./Main.cpp: In function ‘int main()’:
./Main.cpp:75:23: warning: comparison of integer expressions of different signedness: ‘int’ and ‘std::vector<int>::size_type’ {aka ‘long unsigned int’} [-Wsign-compare]
   75 |     for (int i = 0; i < zz.size(); ++i) {
      |                     ~~^~~~~~~~~~~
./Main.cpp:106:40: warning: comparison of integer expressions of different signedness: ‘std::vector<int>::size_type’ {aka ‘long unsigned int’} and ‘int’ [-Wsign-compare]
  106 |             } else if (zz.size()-idx-1 >= k) {
      |                        ~~~~~~~~~~~~~~~~^~~~

ジャッジ結果

セット名 Sample All
得点 / 配点 0 / 0 500 / 500
結果
AC × 2
AC × 22
セット名 テストケース
Sample example_00.txt, example_01.txt
All example_00.txt, example_01.txt, test_00.txt, test_01.txt, test_02.txt, test_03.txt, test_04.txt, test_05.txt, test_06.txt, test_07.txt, test_08.txt, test_09.txt, test_10.txt, test_11.txt, test_12.txt, test_13.txt, test_14.txt, test_15.txt, test_16.txt, test_17.txt, test_18.txt, test_19.txt
ケース名 結果 実行時間 メモリ
example_00.txt AC 4 ms 8240 KiB
example_01.txt AC 8 ms 8324 KiB
test_00.txt AC 524 ms 46416 KiB
test_01.txt AC 10 ms 8252 KiB
test_02.txt AC 574 ms 38340 KiB
test_03.txt AC 523 ms 34340 KiB
test_04.txt AC 524 ms 34316 KiB
test_05.txt AC 611 ms 43192 KiB
test_06.txt AC 539 ms 33364 KiB
test_07.txt AC 526 ms 34224 KiB
test_08.txt AC 274 ms 10268 KiB
test_09.txt AC 275 ms 10268 KiB
test_10.txt AC 271 ms 10140 KiB
test_11.txt AC 104 ms 22900 KiB
test_12.txt AC 98 ms 20784 KiB
test_13.txt AC 90 ms 21072 KiB
test_14.txt AC 572 ms 40072 KiB
test_15.txt AC 537 ms 33240 KiB
test_16.txt AC 512 ms 34004 KiB
test_17.txt AC 496 ms 31980 KiB
test_18.txt AC 476 ms 26276 KiB
test_19.txt AC 468 ms 26784 KiB