【判断一个图是否构成树(C++)】-创新互联
判断一个图是否构成树(C++)
问题描述
网站名称:【判断一个图是否构成树(C++)】-创新互联
URL标题:http://cdiso.cn/article/dojhsd.html
给定一个无向图,判断该图是否构成树。
梁河ssl适用于网站、小程序/APP、API接口等需要进行数据传输应用场景,ssl证书未来市场广阔!成为成都创新互联的ssl证书销售渠道,可以享受市场价格4-6折优惠!如果有意向欢迎电话联系或者加微信:18980820575(备注:SSL证书合作)期待与您的合作!输入输入有若干测试样例。第一行是测试样例个数,接下来若干测试样例。每个测试样例的第一行是结点数n
,而且结点用1, 2, ..., n
编号。第二行是边数m
,接下来是m
个结点对。
如果一个图是树,则打印"YES"
,否则打印"NO"
。每个输出占一行。
3
3
2
1 2
2 3
3
3
1 2
2 3
1 3
3
1
2 3
输出样例YES
NO
NO
我的思路思路:本题有n
个顶点,如果构成树,就说明要有n-1
条边,这是第一个判断条件;有了n-1
条边,那就只有两种情况,一种是没有回路,构成一棵树,一种是有回路,有回路就说明图不连通,于是在输入结点对时就会有顶点从未出现,所以我用了set
来存储结点对里出现的顶点序号,再循环查找,如果有顶点未出现,则不构成树。
#include#include#include
using namespace std;
int main()
{int num;
cin >>num;
while (num--)
{int n, m, a, b;
cin >>n >>m;
unordered_setset;
for (int i = 0; i< m; ++i)
{cin >>a >>b;
set.insert(a);
set.insert(b);
}
if (n != m + 1)
{cout<< "NO"<< endl;
}
else
{int flag = 1;
for (int i = 1; i<= n; ++i)
{if (!set.count(i))
{cout<< "NO"<< endl;
flag = 0;
break;
}
}
if (flag == 1)
cout<< "YES"<< endl;
}
}
}
第一次看到这道题的时候总觉得边和顶点间有点关系,很快写出来了,后来第二次再见到只觉得有点熟悉,就感觉有什么点没有抓到,在网上搜,看到的好多都是dfs
,就不大想看,然后找到了之前自己写的代码,最后就想写一篇自己的blog
,于是有了第一篇blog
,嗯,当个学习记录吧。
你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧
网站名称:【判断一个图是否构成树(C++)】-创新互联
URL标题:http://cdiso.cn/article/dojhsd.html