Run ID | 作者 | 问题 | 语言 | 测评结果 | 分数 | 时间 | 内存 | 代码长度 | 提交时间 |
---|---|---|---|---|---|---|---|---|---|
32980 | gaochunzhen | 【S】T2 | C++ | 通过 | 100 | 628 MS | 356064 KB | 1752 | 2024-10-02 16:36:43 |
#include <bits/stdc++.h> using namespace std; typedef long long ll; const int N = 2009; vector<int> G[N]; int n, m, q, type, lstans = 1, fa[N][N][13]; bool vis[N][N]; void dfs(const int &u, int now) { if (vis[u][now]) return; vis[u][now] = 1; for (int v : G[now]) dfs(u, v); } void tp1(int &s) {s = (s ^ lstans) % n + 1;} int kth(int st, int u, int k) { for (int i = 10; i >= 0; i--) { if (k >= (1 << i)) { u = fa[st][u][i], k -= (1 << i); } } return u; } signed main() { scanf("%d%d%d%d", &n, &m, &q, &type); for (int i = 1; i <= m; i++) { int u, v; scanf("%d%d", &u, &v); G[u].push_back(v); } for (int i = 1; i <= n; i++) { sort(G[i].begin(), G[i].end()); } for (int i = 1; i <= n; i++) dfs(i, i); for (int i = 1; i <= n; i++) { for (int j = 1; j <= n; j++) { if (i == j || !vis[j][i]) continue; for (int k : G[j]) { if (vis[k][i]) { fa[i][j][0] = k; break; } } } } for (int k = 1; (1 << k) <= n; k++) { for (int i = 1; i <= n; i++) { for (int j = 1; j <= n; j++) { fa[i][j][k] = fa[i][fa[i][j][k - 1]][k - 1]; } } } while (q--) { int s, t, K; scanf("%d%d%d", &s, &t, &K); if (type) tp1(s), tp1(t), tp1(K); if (!vis[s][t]) { printf("-1\n"), lstans = 1; continue; } int uk = kth(t, s, K - 1), un = kth(t, s, n); if (un || !uk) printf("-1\n"), lstans = 1; else printf("%d\n", lstans = uk); } return 0; }