Run ID 作者 问题 语言 测评结果 分数 时间 内存 代码长度 提交时间
32839 baka24 【S】T2 C++ 通过 100 491 MS 283128 KB 1780 2024-10-02 12:53:16

Tests(20/20):


#include<bits/stdc++.h> using namespace std; #define double long double #define lson (pos<<1) #define rson (pos<<1|1) #define inx(u) int I=h[(u)],v=edge[I].v;I;I=edge[I].nx,v=edge[I].v #define pb push_back int read(){int x=0,f=1;char c=getchar();while(c>'9'||c<'0'){if(c=='-')f=-1;c=getchar();}while('0'<=c&&c<='9')x=x*10+c-'0',c=getchar();return x*f;} const int MAXN=2010,MAXM=5010,N=16,inf=1000000000; struct Edge{int v,nx;}edge[MAXM<<1];int h[MAXN],CNT;void add_side(int u,int v){edge[++CNT]={v,h[u]};h[u]=CNT;} vector<int>G[MAXN]; int n,m,q,ty,mx,vis[MAXN],fa[MAXN][MAXN][N+2]; queue<int>Q; void bfs(int x){ for(int i=1;i<=n;i++)vis[i]=0; Q.push(x),vis[x]=1; while(!Q.empty()){ int u=Q.front();Q.pop(); for(inx(u))if(!vis[v]){ vis[v]=1; Q.push(v); } } for(int i=1;i<=n;i++){ fa[x][i][0]=i==x?0:n+1; for(auto v:G[i])if(vis[v])fa[x][i][0]=min(fa[x][i][0],v); if(fa[x][i][0]==inf)fa[x][i][0]=0; } fa[x][n+1][0]=n+1; for(int i=1;i<=N;i++){ for(int j=1;j<=n+1;j++)fa[x][j][i]=fa[x][fa[x][j][i-1]][i-1]; } } void slv(){ n=read(),m=read(),q=read(),ty=read(); for(int i=1;i<=m;i++){ int u=read(),v=read(); add_side(v,u); G[u].pb(v); } for(int i=1;i<=n;i++)bfs(i); int lstans=ty; while(q--){ int s=read(),t=read(),k=read(),ans=0; if(ty)s=(s^lstans)%n+1,t=(t^lstans)%n+1,k=(k^lstans)%n+1; k--; for(int i=N;i>=0;i--)if(k&(1<<i))s=fa[t][s][i]; ans=s; if(fa[t][s][N]||ans==0||ans==n+1)ans=-1; printf("%d\n",ans); if(ty)if(ans!=-1)lstans=ans;else lstans=1; } } signed main(){ slv(); return 0; }


测评信息: