Please sign in first.
Submission #62480724
Source Code Expand
#include <bits/stdc++.h>
using lint = long long;
const int N = 1e6 + 10;
const int INF = 0x3f3f3f3f;
std::string k;
std::vector<int> g[N];
int n, s;
bool flag;
int cnt, ed = -1, dis[N], nodes[N];
// dfn 记录遍历到的点
void dfs(int u, int f) {
nodes[++cnt] = u;
dis[u] = dis[f] + 1;
for (auto v : g[u]) {
if (flag) return ;
if (dis[v] != INF) { // 环
ed = v;
flag = true;
return ;
}
dfs(v, u);
}
if (flag) return ;
--cnt;
}
lint mod(std::string a, lint b) {
lint res = 0;
for (auto ch : a) res = (res * 10 + ch - '0') % b;
return res;
}
bool cmp(const std::string &a, const std::string &b) {
if (a.size() != b.size()) return a.size() < b.size();
for (size_t i = 0; i < a.size(); ++i) {
if (a[i] < b[i]) return true;
}
return false;
}
int main() {
std::cin.tie(0)->sync_with_stdio(0);
std::cin >> n >> s >> k;
for (int u = 1, v; u <= n; ++u) {
std::cin >> v;
g[u].push_back(v);
}
memset(dis, 0x3f, sizeof(dis));
dis[0] = 0;
dfs(s, 0);
// 从 a 出发没有环,则 k 不可能很大,直接 DFS/ans 直接可以求出
if (ed == -1 || (k.size() <= 10 && cmp(k, std::to_string(cnt))))
return std::cout << nodes[stoi(k) + 1] << std::endl, 0;
// 存在环, ed 就是环的起点,在 nodes 中找到 ed 就可确定长度
int id = -1;
for (int i = 1; i <= cnt; ++i)
if (nodes[i] == ed) {
id = i;
break;
}
int len = cnt - id + 1;
int r = (mod(k, len) - (dis[ed] - 2) % len + len) % len;
if (r == 0) r = len;
std::cout << nodes[id + r - 1] << std::endl;
return 0;
}
Submission Info
| Submission Time | |
|---|---|
| Task | D - へんてこ辞書 |
| User | OIer_wst |
| Language | C++ 20 (gcc 12.2) |
| Score | 100 |
| Code Size | 1632 Byte |
| Status | AC |
| Exec Time | 15 ms |
| Memory | 12612 KiB |
Judge Result
| Set Name | Sample | Subtask1 | All | ||||||
|---|---|---|---|---|---|---|---|---|---|
| Score / Max Score | 0 / 0 | 50 / 50 | 50 / 50 | ||||||
| Status |
|
|
|
| Set Name | Test Cases |
|---|---|
| Sample | subtask0_sample_01.txt, subtask0_sample_03.txt |
| Subtask1 | subtask0_0.txt, subtask0_1.txt, subtask0_2.txt, subtask0_3.txt, subtask0_4.txt, subtask0_5.txt, subtask0_6.txt, subtask0_7.txt, subtask0_8.txt, subtask0_9.txt, subtask0_sample_01.txt, subtask0_sample_03.txt |
| All | subtask0_0.txt, subtask0_1.txt, subtask0_2.txt, subtask0_3.txt, subtask0_4.txt, subtask0_5.txt, subtask0_6.txt, subtask0_7.txt, subtask0_8.txt, subtask0_9.txt, subtask0_sample_01.txt, subtask0_sample_03.txt, subtask1_0.txt, subtask1_1.txt, subtask1_10.txt, subtask1_11.txt, subtask1_2.txt, subtask1_3.txt, subtask1_4.txt, subtask1_5.txt, subtask1_6.txt, subtask1_7.txt, subtask1_8.txt, subtask1_9.txt, subtask1_sample_02.txt |
| Case Name | Status | Exec Time | Memory |
|---|---|---|---|
| subtask0_0.txt | AC | 14 ms | 12220 KiB |
| subtask0_1.txt | AC | 12 ms | 11500 KiB |
| subtask0_2.txt | AC | 12 ms | 11900 KiB |
| subtask0_3.txt | AC | 11 ms | 10720 KiB |
| subtask0_4.txt | AC | 13 ms | 12400 KiB |
| subtask0_5.txt | AC | 11 ms | 11200 KiB |
| subtask0_6.txt | AC | 11 ms | 10712 KiB |
| subtask0_7.txt | AC | 12 ms | 11760 KiB |
| subtask0_8.txt | AC | 11 ms | 10744 KiB |
| subtask0_9.txt | AC | 13 ms | 12124 KiB |
| subtask0_sample_01.txt | AC | 6 ms | 7376 KiB |
| subtask0_sample_03.txt | AC | 6 ms | 7468 KiB |
| subtask1_0.txt | AC | 12 ms | 10964 KiB |
| subtask1_1.txt | AC | 13 ms | 11628 KiB |
| subtask1_10.txt | AC | 15 ms | 12612 KiB |
| subtask1_11.txt | AC | 7 ms | 7392 KiB |
| subtask1_2.txt | AC | 11 ms | 10944 KiB |
| subtask1_3.txt | AC | 10 ms | 10236 KiB |
| subtask1_4.txt | AC | 11 ms | 10648 KiB |
| subtask1_5.txt | AC | 13 ms | 11916 KiB |
| subtask1_6.txt | AC | 11 ms | 10544 KiB |
| subtask1_7.txt | AC | 11 ms | 10276 KiB |
| subtask1_8.txt | AC | 14 ms | 12568 KiB |
| subtask1_9.txt | AC | 15 ms | 12556 KiB |
| subtask1_sample_02.txt | AC | 6 ms | 7472 KiB |