提出 #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;
}
提出情報
提出日時
2022-09-03 22:55:50+0900
問題
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
結果
セット名
テストケース
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