提交时间:2024-01-13 20:25:38

运行 ID: 24917

#include <bits/stdc++.h> #define PII pair<int,int> using namespace std; const int MAXN=5005; int N,Q,lstans=0; vector<int>gra[MAXN]; int bel[MAXN],vis[MAXN]; bool g[MAXN][MAXN]; int col=1; bool flag; void Go(int u,int T) { if(flag) return; if(u==T) { flag=1; return; } vis[u]=Q; for(int i=0;i<gra[u].size();i++) { int v=gra[u][i]; if(g[u][v]&&!vis[v]) Go(v,T); } return; } void Spread(int u) { bel[u]=col; for(int i=0;i<gra[u].size();i++) { int v=gra[u][i]; if(g[u][v]&&bel[v]!=col) Spread(v); } return; } int main() { // freopen("planar.in","r",stdin); // freopen("planar.out","w",stdout); scanf("%d %d",&N,&Q); for(int i=1;i<=N;i++) { int k; scanf("%d",&k); for(int j=1;j<=k;j++) { int t; scanf("%d",&t); gra[i].push_back(t); g[i][t]=1; } bel[i]=1; } while(Q--) { char opt[5]; int u,v; scanf("%s",opt+1); scanf("%d %d",&u,&v); u^=lstans,v^=lstans; if(opt[1]=='-') { g[u][v]=g[v][u]=0; flag=0; Go(u,v); if(flag==0) { lstans=0; col++; Spread(v); } lstans=col; } else { lstans=(bel[u]==bel[v]); } printf("%d\n",lstans); } return 0; }