Run ID | 作者 | 问题 | 语言 | 测评结果 | 分数 | 时间 | 内存 | 代码长度 | 提交时间 |
---|---|---|---|---|---|---|---|---|---|
32957 | A21μΘ_wjy | 【S】T2 | C++ | 编译错误 | 0 | 0 MS | 0 KB | 1714 | 2024-10-02 16:13:15 |
#include<bits/stdc++.h> #define int short #define i32 signed using namespace std; const int maxn=2e3+7; const int LB=12; void rd(int &x){ x=0;int f=1; char ch=getchar(); while(!isdigit(ch)){if(ch=='-')f=-1;ch=getchar();} while(isdigit(ch)){x=(x<<1)+(x<<2)+(ch^48);ch=getchar()} } int n,m,tp; i32 q; vector<int> E[maxn]; int U[maxn<<2]; int V[maxn<<2]; int F[maxn][maxn][LB]; bool vis[maxn]; inline void DFS(int u){ // cout<<u<<endl; vis[u]=1; for(auto v:E[u])if(!vis[v])DFS(v); }//求出所有可以到达 t 的点 inline void Set(int ST[maxn][LB],int t){ for(int i=1;i<=n+1;i++)ST[i][0]=n+1; for(int i=1;i<=m;i++)if(vis[U[i]]&&vis[V[i]])ST[U[i]][0]=min(ST[U[i]][0],V[i]); ST[t][0]=n+1; for(int j=1;j<LB;j++)for(int i=1;i<=n+1;i++)ST[i][j]=ST[ST[i][j-1]][j-1]; }//预处理 i32 main(){ios::sync_with_stdio(0);cin.tie(0);cout.tie(0); rd(n),rd(m),cin>>q,rd(tp); for(int i=1;i<=m;i++)rd(U[i]),rd(V[i]),E[V[i]].push_back(U[i]); for(int t=1;t<=n;t++){ for(int i=1;i<=n;i++)vis[i]=0; DFS(t);Set(F[t],t); // cout<<"! "<<t<<endl; } int lst=1; while(q--){ int s,t,k; rd(s),rd(t),rd(k); if(tp)s=(s^lst)%n+1,t=(t^lst)%n+1,k=(k^lst)%n+1; // cout<<s<<" "<<t<<" "<<k<<endl; if(F[t][s][0]>n){ //不可达 // cerr<<"INACCESSABLE"<<endl; lst=1,cout<<-lst<<endl; continue; } if(F[t][F[t][s][LB-1]][LB-1]<=n){ //进环 // cerr<<"CYCLE"<<endl; lst=1,cout<<-lst<<endl; continue; } k--; for(int i=LB-1;i>=0;i--)if(k&(1<<i))s=F[t][s][i]; if(s>n){ // cerr<<"THE LENGTH OF THE PATH IS NOT ENOUGH"<<endl; lst=1,cout<<-lst<<endl; continue; } lst=s; cout<<lst<<endl; } }