时间:1s 空间:32M
题目描述:
给你一副无向图,求连通块的个数
比如上图有3个连通块
输入格式:
第一行输入两个整数n,m,表示图的节点数量,边的数量
接下来输入m行,每行两个整数a,b表示a,b之间有一条无向边
输出格式:
输出一个整数
样例输入:
15 12
13 7
5 15
13 2
5 4
5 2
2 4
7 4
15 9
9 3
3 10
1 6
11 8
样例输出:
5
约定:
1<=n,m<=100000
提示:
普通递归就行了,不用回溯。老老实实打暴力。
代码:
#include <iostream>
#include <cstdio>
#include <cstring>
#include <string>
#include <cmath>
#include <algorithm>
#include <vector>
#define N 100001
using namespace std ;
vector <int> T [ N ] ;
bool bo [ N ] ;
int ans = 0 , n , m , k_a , k_b ;
void dye ( int k )
{
bo [ k ] = 1 ;
for ( int i = 0 ; i < T [ k ] .size ( ) ; i ++ )
if ( bo [ T[k][i] ] == 0 ) dye ( T [ k ] [ i ] ) ;
return ;
}
int main ( )
{
scanf ( "%d %d" , & n , & m ) ;
for ( int i = 1 ; i <= m ; i ++ )
{
scanf ( "%d %d" , & k_a , & k_b ) ;
T [ k_a ] . push_back ( k_b ) ;
T [ k_b ] . push_back ( k_a ) ;
}
memset ( bo , 0 , sizeof ( bo ) ) ;
for ( int i = 1 ; i <= n ; i ++ ) if ( bo [ i ] == 0 )
{
ans ++ ;
dye ( i ) ;
}
printf ( "%d\n" , ans ) ;
return 0 ;
}
相关链接:
XJOI 题解小全:
https://blog.csdn.net/zj_mrz/article/details/80949787
XJOI 3325 树的深度 题解:
https://blog.csdn.net/zj_mrz/article/details/81149168
XJOI 3326 树的深度again 题解:
https://blog.csdn.net/zj_mrz/article/details/81163752