Run ID | 作者 | 问题 | 语言 | 测评结果 | 分数 | 时间 | 内存 | 代码长度 | 提交时间 |
---|---|---|---|---|---|---|---|---|---|
32991 | LYLAKIOIAKIOI | 【S】T2 | C++ | 运行出错 | 10 | 468 MS | 462332 KB | 1361 | 2024-10-02 16:51:55 |
#include<bits/stdc++.h> #define PII pair<int,int> #define fi first #define se second using namespace std; const int N=2100,V=5500; int n,m,q,t; vector<int> e[N]; int pre[N][N][15]; int sc[N][N]; bool r[N][N]; inline void dfs(int s,int u,int d){ sc[s][u]=d; for(auto ed:e[u]){ if(sc[s][ed]==0) dfs(s,ed,d+1),pre[s][ed][0]=u; else {r[s][ed]=1;assert(ed>=u);} if(r[s][ed]) r[s][u]=1; if(r[s][u]) break; } } int main(){ //freopen("path.in","r",stdin); //freopen("path.out","w",stdout); scanf("%d%d%d%d",&n,&m,&q,&t); for(int i=1;i<=m;i++){ int u,v;scanf("%d%d",&u,&v);e[u].push_back(v);//e[v].push_back(u); }for(int i=1;i<=n;i++){ sort(e[i].begin(),e[i].end()); }for(int i=1;i<=n;i++) dfs(i,i,1); for(int j=1;j<=13;j++){ for(int k=1;k<=n;k++) for(int i=1;i<=n;i++) pre[k][i][j]=pre[k][pre[k][i][j-1]][j-1]; }int la=1; while(q--){ int u,v,k;scanf("%d%d%d",&u,&v,&k); u^=la*t;v^=la*t;k^=la*t; if(t) u=u%n+1,v=v%n+1,k=k%n+1; if(sc[u][v]<k){ printf("%d\n",-1);la=1; }else{ k=sc[u][v]-k; for(int i=0;i<=13;i++){ if(k&1) v=pre[u][v][i]; k>>=1; }la=v;printf("%d\n",la); } } return 0; }