用并查集判断是否为树

给定包含N个顶点和M条边的无向图,通过并查集算法来验证该图是否构成一棵树。输入包括测试数据组数T,以及每组的顶点数N和边数M,以及具体的边连接信息。输出是对于每组数据的判断结果,若是树则输出'YES',否则输出'NO'。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

描述

给定一个包含 N 个顶点 M 条边的无向图 G ,判断 G 是不是一棵树。

输入

第一个是一个整数 T ,代表测试数据的组数。 (1 ≤ T ≤ 10)

每组测试数据第一行包含两个整数 NM 。(2 ≤ N ≤ 500, 1 ≤ M ≤ 100000)

以下 M 行每行包含两个整数 ab ,表示顶点 a 和顶点 b 之间有一条边。(1 ≤ a, bN)

输出

对于每组数据,输出YES或者NO表示 G 是否是一棵树。

样例输入
2
3 2
3 1
3 2
5 5
3 1
3 2
4 5
1 2
4 1 
样例输出
YES
NO

本题要求判断给定的无向图是不是一棵树。

包含N个点M条边的无向图是树的充分必要条件是N=M+1且N个点连通。

所以本题的关键就是判断这N个点是不是连通在一起。

而对于是否连通,我们可以用并查集,依次处理每一条边,把每条边的两个顶点都合并到一个集合里。最后检查是不是N个点都在同一个集合中。


#include<bits/stdc++.h>
#define N 510

using namespace std;
int f[N];

int Find(int x)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值