c++家族查询问题,代码输出结果错误

题目描述
某个家族人员过于庞大,要判断两个是否是亲戚,确实还很不容易,现在给出某个亲戚关系图,求任意给出的两个人是否具有亲戚关系。
规定:x和y是亲戚,y和z是亲戚,那么x和z也是亲戚。如果x,y是亲戚,那么x的亲戚都是y的亲戚,y的亲戚也都是x的亲戚。(人数≤5000,询问亲戚关系次数≤5000)。

输入描述
第一行为数据组数T(T <= 20)
对于每组数据,第一行有两个整数n、m(1 <= n, m <= 5000),表示有n个人,编号1~n,其中存在m个亲戚关系
接下来m行,每行有两个整数u、v(u != v, 1 <= u, v <= n),表示u和v之间有亲戚关系
然后是询问组数q(1 <= q <= 5000)
接下来q行,每行有两个整数u、v(u != v, 1 <= u, v <= n),询问u和v之间是否有亲戚关系

输出描述
对于每组数据,输出q行,每行为"Yes"或"No",表示是否存在亲戚关系
每组数据的输出用空行隔开

输入样例
2
3 1
2 3
2
1 2
2 3
4 2
1 2
1 4
3
1 2
1 3
2 4

输出样例
No
Yes

Yes
No
Yes

我的代码如下:

#include <iostream>
using namespace std;

int main(){
    int T;
    int n,m;
    cin>>T;
    for(int i=0;i<T;i++){
        cin>>n>>m;
        int a[n+1]={0},k=1;
        for(int t=0;t<m;t++){
            int x,y;
            cin>>x>>y;
            if(a[x]==0&&a[y]!=0){
                a[x]=a[y];
            }
            if(a[x]!=0&&a[y]==0){
                a[y]=a[x];
            }
            if(a[x]==0&&a[y]==0){
                a[x]=k;
                a[y]=k;
                k++;
            }
            if(a[x]!=a[y]&&a[x]&&a[y]){
                a[y]=a[x];
                for(int j=1;j<n+1;j++){
                    if(a[j]==a[y]){
                        a[j]=a[x];
                    }
                }
            }
        }
        int q;
        cin>>q;
        for(int c=0;c<q;c++){
            int u,v;
            cin>>u>>v;
            if(a[u]==a[v]&&a[u]!=0){
                cout<<"Yes"<<endl;
            }
            else{
                cout<<"No"<<endl;
            }
        }
        cout<<endl;
    }
}

编译正确,

请大佬看看为啥输出错误,谢谢!

你题目的解答代码如下:

#include <iostream>
using namespace std;
int main(){
    int T;
    int n,m;
    cin>>T;
    for(int i=0;i<T;i++){
        cin>>n>>m;
        int a[n+1]={0},k=1;
        for(int t=0;t<m;t++){
            int x,y;
            cin>>x>>y;
            if(a[x]==0&&a[y]!=0){
                a[x]=a[y];
            }
            else if(a[x]!=0&&a[y]==0){ //加else
                a[y]=a[x];
            }
            else if(a[x]==0&&a[y]==0){ //加else
                a[x]=k;
                a[y]=k;
                k++;
            }
            else if(a[x]!=a[y]&&a[x]&&a[y]){  //加else
                //a[y]=a[x];   这行去掉  如果先a[y]=a[x]; 之后再比较if(a[j]==a[y])就没意义了
                int ty = a[y];
                for(int j=1;j<n+1;j++){
                    if(a[j]==ty){
                        a[j]=a[x];
                    }
                }
            }
        }
        int q;
        cin>>q;
        for(int c=0;c<q;c++){
            int u,v;
            cin>>u>>v;
            if(a[u]==a[v]&&a[u]!=0){
                cout<<"Yes"<<endl;
            }
            else{
                cout<<"No"<<endl;
            }
        }
        cout<<endl;
    }
}

如有帮助,望采纳!谢谢!