Run ID 作者 问题 语言 测评结果 分数 时间 内存 代码长度 提交时间
32995 baka24 【S】T2 C++ 通过 100 422 MS 336436 KB 1845 2024-10-02 16:55:34

Tests(20/20):


#include<iostream> #include<vector> #include<bitset> #include<ctime> #include<bits/stdc++.h> #define timeMS (clock()*1000/CLOCKS_PER_SEC) using namespace std; inline int read(){ int i=getchar(),r=0; while(i<'0'||i>'9')i=getchar(); while(i>='0'&&i<='9')r=(r<<1)+(r<<3)+(i^48),i=getchar(); return r; } const int N=2010,M=5010,LG=12; int n,m,q,t; int head[N<<1],to[M<<1],nex[M<<1],edge; inline void insert(int u,int v){ edge++; to[edge]=v; nex[edge]=head[u]; head[u]=edge; } int bel[N],low[N],dfn[N],stk[N],top; vector<int>bc[N]; bool in_stk[N]; bitset<N>accb[N],acc[N]; int tarjan(int nd,int frm){ dfn[nd]=frm; acc[frm][nd]=1; for(int i=head[nd];i;i=nex[i])if(dfn[to[i]]!=frm)tarjan(to[i],frm); } void init(){ cin>>n>>m>>q>>t; for(int i=1;i<=m;i++){ int u,v; cin>>u>>v; insert(u,v); } for(int i=1;i<=n;i++)tarjan(i,i); } int fa[N][N][LG];//目标为 i 下 j 的下一步 inline int kfa(int i,int nd,int k){ for(int j=0;k;k>>=1,j++)if(k&1)nd=fa[i][nd][j]; return nd; } int main(){ init(); for(int i=1;i<=n;i++){//枚举目标 for(int j=1;j<=n;j++)if(acc[j][i]&&i!=j){ int mn=n+1; for(int e=head[j];e;e=nex[e])if(acc[to[e]][i])mn=min(mn,to[e]); if(mn>n)continue; fa[i][j][0]=mn; } for(int l=1;l<LG;l++){ for(int j=1;j<=n;j++)fa[i][j][l]=fa[i][fa[i][j][l-1]][l-1]; } } int lans=1; while(q--){ int u=read()^lans*t,v=read()^lans*t,k=read()^lans*t; if(t)u=u%n+1,v=v%n+1,k=k%n+1; if(kfa(v,u,n)!=0||kfa(v,u,k-1)==0||!acc[u][v]){printf("-1\n");lans=1;continue;} lans=kfa(v,u,k-1); printf("%d\n",lans); } // cerr<<timeMS; return 0; }


测评信息: