题目:L - 畅通工程 :https://vjudge.net/contest/310915#problem/L
ps:注意初始化和小细节
还是并查集: 不过我们如何去计算联通快的个数呢?
我们有一个Find函数 再把路径压缩时 以及组成新成员的时候 我们是把两个祖先不一样的联通快合并在一起 那么联通快的个数我们只需要去枚举一遍所有的节点 找到祖先节点的个数就可以了
#include<set>
#include<map>
#include<string.h>
#include<string>
#include<vector>
#include<iostream>
#include<queue>
#include<algorithm>
#include<math.h>
#define mem(a,b) memset(a,b,sizeof(a))
#define inf 0x3f3f3f3f
using namespace std;
const int maxn=2e3;
int pre[maxn];
int n,m;
int Find(int nod)
{
if(pre[nod]!=nod)
return Find(pre[nod]);
else return nod;//递归找节点的祖先
}
void join(int x,int y)
{
if(Find(y)!=Find(x))
pre[Find(y)]=Find(x);//将X加入到Y的大家庭中
}
void ccount()
{
int num=0;
for(int i=1;i<=n;i++