你的 solve 函数里面可能有这么一段
for(int i=0,x,y;i<(int)v[now].size();i++)
{
x=v[now][i].x;y=v[now][i].y;
x=find(x);y=find(y);
if(x==y)
{
for(int j=l;j<=r;j++)
cout<<"No\n";
ans=0;
break;
}
x=v[now][i].x;y=v[now][i].y;
merge(x+n,y);
merge(x,y+n);
}
加上注释的那一句一定要加上,因为你按秩合并之后的祖先可能已经是 >n 的了,如果再加上 n,就寄了。