提交时间:2024-10-02 13:18:10
运行 ID: 32859
#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; namespace sub1 { 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); } bool is[N]; int rd[N], tp; void clear() { for (int i = 1; i <= tp; i++) is[rd[i]] = 0; } int qry(int s, int t, int K) { if (!vis[s][t]) return -1; tp = 0; while (1) { if (is[s]) {clear(); return -1;} is[s] = 1, rd[++tp] = s; if (s == t) break; for (int v : G[s]) { if (vis[v][t]) { s = v; break; } } } clear(); return (tp >= K ? rd[K] : -1); } void Main() { for (int i = 1; i <= n; i++) { dfs(i, i); } while (q--) { int s, t, K; scanf("%d%d%d", &s, &t, &K); if (type) s = (s ^ lstans) % n + 1, t = (t ^ lstans) % n + 1, K = (K ^ lstans) % n + 1; printf("%d\n", lstans = qry(s, t, K)); if (lstans == -1) lstans = 1; } } } 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()); } sub1::Main(); return 0; }