hdu1213

说什么并查集,就是数连通块。

#include<bits/stdc++.h>
using namespace std;
const int maxn=1005;
int a[maxn][maxn];
int vis[maxn];
int n,m;
void dfs(int x){
    if(vis[x])return;
    vis[x]=1;
    for(int i=1;i<=n;i++)
        if(a[i][x])dfs(i);
}
int main(){
    int t;
    cin>>t;
    while(t--){
        
        cin>>n>>m;
        memset(vis,0,sizeof(vis));
        memset(a,0,sizeof(a));
        int x,y;
        for(int i=1;i<=m;i++){
            cin>>x>>y;
            a[x][y]=a[y][x]=1;
        }
        int ans=0;
        for(int i=1;i<=n;i++)
            if(!vis[i]){
                ans++;
                dfs(i);
            }
        printf("%d\n",ans);
    }
}

 

posted @ 2020-02-29 22:20  syzf2222  阅读(88)  评论(0编辑  收藏  举报