AcWing 3587:连通图 ← dfs(邻接矩阵 or 链式前向星)

ops/2024/9/24 21:30:41/

【题目来源】
https://www.acwing.com/problem/content/3590/

【题目描述】
给定一个无向图和其中的所有边,判断这个图是否所有顶点都是连通的。

【输入格式】
输入包含若干组数据。
每组数据第一行包含两个整数 n 和 m,表示无向图的点和边数。
接下来 m 行,每行包含两个整数 x,y,表示点 x 和点 y 相连。
点的编号从 1 到 n。
图中可能存在
重边自环

【输出格式】
每组数据输出一行,一个结果,如果所有顶点都是连通的,输出 YES,否则输出 NO。

【数据范围】
输入最多包含 10 组数据。
1≤n≤1000,
1≤m≤5000,
1≤x,y≤n

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

【输出样例】
NO
YES

【算法分析】
● 本题的“
并查集”代码实现详见:https://blog.csdn.net/hnjzsyjyj/article/details/126455868
● 本题利用 dfs 判断连通图的原理在于“
dfs必然能够遍历到连通图的所有点”。如果有点没有被遍历到,说明不连通。

【算法代码:dfs+链式前向星
● dfs算法模板:
https://blog.csdn.net/hnjzsyjyj/article/details/118736059
链式前向星详见:https://blog.csdn.net/hnjzsyjyj/article/details/139369904

#include <bits/stdc++.h>
using namespace std;const int N=1e3+5;
const int M=5e3+5;
int e[M<<1],ne[M<<1],h[N],idx;
bool st[N];
int n,m;void add(int a,int b) {e[idx]=b,ne[idx]=h[a],h[a]=idx++;
}void dfs(int u) {st[u]=1;for(int i=h[u]; i!=-1; i=ne[i]) {int j=e[i];if(!st[j]) dfs(j);}
}int main() {while(cin>>n>>m) {memset(st,false,sizeof st);memset(h,-1,sizeof h);idx=0;while(m--) {int a,b;cin>>a>>b;add(a,b),add(b,a);}dfs(1);bool flag=true;for(int i=1; i<=n; i++)if(!st[i]) {flag=false;break;}if(flag) cout<<"YES"<<endl;else cout<<"NO"<<endl;}return 0;
}/*
in:
4 3
1 2
2 3
3 2
3 2
1 2
2 3out:
NO
YES
*/

【算法代码:dfs+邻接矩阵
● dfs算法模板:
https://blog.csdn.net/hnjzsyjyj/article/details/118736059
● 无向无权图的邻接矩阵实现:https://blog.csdn.net/hnjzsyjyj/article/details/116245897

#include <bits/stdc++.h>
using namespace std;const int N=1010;
int g[N][N];
bool st[N];
int n,m;void dfs(int u) {st[u]=true;for(int i=1; i<=n; i++)if(!st[i] && g[u][i]!=0) dfs(i);
}int main() {while(cin>>n>>m) {memset(g,0,sizeof g);memset(st,false,sizeof st);int x,y;while(m--) {cin>>x>>y;g[x][y]=g[y][x]=1;}dfs(1);int i;for(i=1; i<=n; i++) {if(!st[i]) break;}if(i<=n) cout<<"NO"<<endl;else cout<<"YES"<<endl;}return 0;
}/*
in:
4 3
1 2
2 3
3 2
3 2
1 2
2 3out:
NO
YES
*/



【参考文献】
https://www.acwing.com/solution/content/124095/

https://blog.csdn.net/hnjzsyjyj/article/details/118736059
https://blog.csdn.net/hnjzsyjyj/article/details/139369904


 


http://www.ppmy.cn/ops/56590.html

相关文章

2779. 数组的最大美丽值

2779. 数组的最大美丽值 题目链接&#xff1a;2779. 数组的最大美丽值 代码如下&#xff1a; class Solution { public:int maximumBeauty(vector<int>& nums, int k) {sort(nums.begin(),nums.end());int res0,left0;for(int right0;right<nums.size();right)…

硅纪元AI应用推荐 | 百度橙篇成新宠,能写万字长文

“硅纪元AI应用推荐”栏目&#xff0c;为您精选最新、最实用的人工智能应用&#xff0c;无论您是AI发烧友还是新手&#xff0c;都能在这里找到提升生活和工作的利器。与我们一起探索AI的无限可能&#xff0c;开启智慧新时代&#xff01; 百度橙篇&#xff0c;作为百度公司在202…

07浅谈大语言模型可调节参数tempreture

浅谈temperature 什么是temperature&#xff1f; temperature是大预言模型生成文本时常用的两个重要参数。它的作用体现在控制模型输出的确定性和多样性&#xff1a; 控制确定性&#xff1a; temperature参数可以控制模型生成文本的确定性&#xff0c;大部分模型中temperatur…

智慧城市的神经网络:Transformer模型在智能城市构建中的应用

智慧城市的神经网络&#xff1a;Transformer模型在智能城市构建中的应用 随着城市化的快速发展&#xff0c;智能城市的概念应运而生&#xff0c;旨在通过先进的信息技术提升城市管理效率和居民生活质量。Transformer模型&#xff0c;作为人工智能领域的一颗新星&#xff0c;其…

Apache Flink 任意 JAR 包上传漏洞利用及防范策略

Apache Flink 任意 JAR 包上传漏洞利用及防范策略 引言 Apache Flink 是一个流行的开源流处理框架&#xff0c;由于其强大的流处理能力&#xff0c;被广泛应用于大数据处理领域。然而&#xff0c;近期发现 Apache Flink 1.9.1 版本存在一个严重的安全漏洞&#xff0c;允许攻击…

JUC并发编程-05:线程高级部分-源码解读

线程高级部分-源码解读 多线程高并发底层锁机制与优化最佳实践深入JDK源码理解LongAdder的分段CAS优化机制 公平锁和非公平锁原理解析 多线程高并发底层锁机制与优化最佳实践 深入JDK源码理解LongAdder的分段CAS优化机制 多个线程进入&#xff0c;为了防止空转&#xff0c;所…

数据结构——二叉树

文章目录 1. 概念 2. 分类 3. 逻辑结构 4. 二叉树 5. 完全二叉树和满二叉树 6. 顺序存储结构 7. 链式存储结构 8. 二叉树的遍历 9. 遍历分类 1. 前序遍历&#xff08;Preorder Traversal&#xff09; 2. 中序遍历&#xff08;Inorder Traversal&#xff09; 3. 后序…

Web3时代的社交媒体:去中心化平台的兴起与挑战

随着区块链技术的进步和普及&#xff0c;我们正逐步进入一个新的Web3时代&#xff0c;其中社交媒体的格局也在发生深刻的变革。传统中心化的社交媒体平台如Facebook、Twitter和Instagram&#xff0c;虽然在连接人们、传播信息和推广内容方面发挥着重要作用&#xff0c;但也面临…