提交时间:2024-10-02 12:56:03

运行 ID: 32843

#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;//cout<<s<<' '<<u<<endl; for(auto ed:e[u]){ //cout<<u<<' '<<ed<<"A"<<endl; if(sc[s][ed]==0) dfs(s,ed,d+1),pre[s][ed][0]=u; else {r[s][ed]=1;} if(r[s][ed]) r[s][u]=1; if(r[s][u]) break; } //} } int main(){ ios::sync_with_stdio(0); cin>>n>>m>>q>>t; for(int i=1;i<=m;i++){ int u,v;cin>>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()); /*if(e[i].size()>0){ int tmp=e[i][0];e[i].clear();e[i].push_back(tmp); //cout<<i<<' '<<tmp<<endl; }*/ }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;cin>>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; //cout<<u<<v<<k<<endl; if(sc[u][v]<k){ cout<<-1<<'\n';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;cout<<la<<'\n'; } }cout.flush(); return 0; }