原题传送门
#include <bits/stdc++.h>
using namespace std;
vector<int> link[100005];//存连接线,link[t]是一个由第t个点所有连接点组成的vector
bool vis[100005];//记录是否访问过
int pointNum, linkNum;
void dfs(int x)
{
vis[x] = true;//标记来过
for (int i = 0; i < link[x].size(); i++)//向所有连接点递归
{
if (vis[link[x][i]] == false)//如果没有访问过
{
dfs(link[x][i]);//递归搜索
}
}
}
int main()
{
cin >> pointNum >> linkNum;
int a, b;
for (int i = 1; i <= linkNum; i++)
{
cin >> a >> b;
link[a].push_back(b);//双向连接,两边推入连接点
link[b].push_back(a);
}
int cnt = 0;
for (int i = 1; i <= pointNum; i++)
{
if (vis[i] == false)//遇到一个点未访问计数器加一
{
cnt++;
dfs(i);
}
}
cout << cnt << endl;
}
DFS