题解
2026-05-24 15:37:45
发布于:浙江
4阅读
0回复
0点赞
大家好,我是энтджей,今天是我2026年第十二次正式发题解!
能不能点个赞
首先简化题意:
- 大致就是先告诉你一张世界地图,然后让你求需要几条路可以连接这张世界地图的所有大陆板块
然后就是写代码
-
处理输入(read):
- 正常输入
-
核心部分(process):
- 查找每一个点,如果没有访问过该结点所在的大陆板块,那么讲这一整块大陆板块上的所有点都标记为已访问(其实就是DFS)(记得计数器+1)
-
最后输入(write):
- 分析一下,可以知道就只需要求出有几块大陆板块就行了,因为通过理解可以知道块大陆板块需要条路就能保证任意一个点可以到其他任意一个点。
完整代码:
#include<bits/stdc++.h>
#define int long long
using namespace std;
const int N = 1e5 + 10;
int n, m;
vector<int> e[N];
bool vis[N];
int cnt;
void dfs(int id){
vis[id] = true;
for( auto x : e[id] ) {
if(!vis[x]) {
dfs(x);
}
}
}
void read() {
memset(vis, false, sizeof vis);
cin >> n >> m;
for(int i = 1; i <= m; i++){
int x, y;
cin >> x >>y;
e[x].push_back(y);
e[y].push_back(x);
}
}
void process() {
for(int i = 1; i <= n; i++){
if(!vis[i]){
cnt++;
dfs(i);
}
}
}
void write() {
cout << cnt - 1;
}
signed main(){
ios::sync_with_stdio(false);
cin.tie(0),cout.tie(0);
read();
process();
write();
return 0;
}
自行对应前面的 处理输入(read),核心部分(process),最后输入(write),我就不写注释鸟
🎉完结撒花🎉
这里空空如也





有帮助,赞一个