#C10L01P01. C10.L01.并查集.例题.网络.1
C10.L01.并查集.例题.网络.1
题目描述
有 N 个计算机中心(编号为 1,2,3,…,N ),开始时都是独立的。后来不断的架设了 M 条网线,每条网线把其中的 2 个计算机中心连接起来。直接或间接链接的计算机中心都可以相互通信,组成一个网络。问有多少个网络?
输入格式
第 1 行:两个整数 N、M ,N 范围 [1,3000],M 范围 [1,3000]。
下面 M 行:每行 2 个整数,表示网线连接的计算机中心编号。
输出格式
一个整数,表示有多少个不连通的网络。
样例
5 4
1 5
2 3
2 4
3 4
2
完善程序
// O(N*N)
#include<bits/stdc++.h>
using namespace std;
int N,M,ans;
struct Tnode{
int num; // 点的编号
int id; // 点所在的块 id
};
Tnode f[10000];
void init(){
cin>>N>>M;
for(int i=1;i<=N;i++)
f[i].num=f[i].id=i;//最开始,id 都不一样
ans=__填空(1)__;
}
int main(){
init();
for(int i=0;i<M;i++){
int a,b,ida,idb;
cin>>a>>b;
ida = f[a].id;
idb = f[b].id;
if(ida!=idb){
for(int j=1;j<=N;j++)
if(__填空(2)__)
f[j].id = idb; //改为相同的 id
__填空(3)__; // 连通块的数量减少 1 个
}
}
cout<<ans;
return 0;
}
填空(1):{{ input(1) }}
填空(2):{{ input(2) }}
填空(3):{{ input(3) }}
相关
在以下作业中: