XJOI 3327 图的连通块的个数 题解

时间: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

猜你喜欢

转载自blog.csdn.net/ZJ_MRZ/article/details/81189606