关于 G 题,这个代码为什么不对
#include<bits/stdc++.h>
using namespace std;
const int N=1e5+1;
vector<int> g[N];
int fa[N],depth[N];
int n,m;
int read() {
int x=0; char c=0; while (!isdigit(c) ) c=getchar();
while (isdigit(c) ) x=(x<<3)+(x<<1)+(c&15),c=getchar();
return x;
}
void dfs(int u,int f) {
fa[u]=f,depth[u]=depth[f]+1;
for (int v:g[u]) if (v^f) dfs(v,u);
}
int dis(int x,int y)
{
int a=depth[x],b=depth[y];
while (depth[x]>depth[y]) x=fa[x];
while (x^y) x=fa[x],y=fa[y];
if (!x) return INT_MAX;
return a+b-2*depth[x];
}
int main()
{
n=read(),m=read();
for (int i=1;i<=n;i++) depth[i]=1;
int last=0;
while (m--) {
int a=read(),b=read(),c=read();
a=1+(1ll*a*(1+last)%998244353)%2;
b=1+(1ll*b*(1+last)%998244353)%n;
c=1+(1ll*c*(1+last)%998244353)%n;
if (a&1) g[b].push_back(c),g[c].push_back(b),dfs(b,0);
else {
if (depth[b]<depth[c]) swap(b,c);
if (dis(b,c)>2) printf("%d\n",last=0);
else printf("%d\n",last=fa[b]);
}
}
return 0;
}