hxc丶 2021-12-06 02:09 采纳率: 78.3%
浏览 28
已结题

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;
    }
}

编译正确,

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

  • 写回答

1条回答 默认 最新

  • 关注

    你题目的解答代码如下:

    #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;
        }
    }
    

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

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录

报告相同问题?

问题事件

  • 系统已结题 12月14日
  • 已采纳回答 12月6日
  • 创建了问题 12月6日

悬赏问题

  • ¥15 关于#c##的问题:最近需要用CAT工具Trados进行一些开发
  • ¥15 南大pa1 小游戏没有界面,并且报了如下错误,尝试过换显卡驱动,但是好像不行
  • ¥15 没有证书,nginx怎么反向代理到只能接受https的公网网站
  • ¥50 成都蓉城足球俱乐部小程序抢票
  • ¥15 yolov7训练自己的数据集
  • ¥15 esp8266与51单片机连接问题(标签-单片机|关键词-串口)(相关搜索:51单片机|单片机|测试代码)
  • ¥15 电力市场出清matlab yalmip kkt 双层优化问题
  • ¥30 ros小车路径规划实现不了,如何解决?(操作系统-ubuntu)
  • ¥20 matlab yalmip kkt 双层优化问题
  • ¥15 如何在3D高斯飞溅的渲染的场景中获得一个可控的旋转物体