题目链接
又是等前女友回消息的一天
大概是要用最少的边构建一个无向连通图吧
想了一下用并查集
竟然过了,AC如下
#include<bits/stdc++.h>
using namespace std;
int cnt, n, m;
int fa[1005], size[1005];
void init()
{
cnt = n - 1;
for(int i = 0; i < n; i++)
fa[i] = i, size[i] = 0;
}
int getf(int a){
if(fa[a] == a)
return a;
int y = fa[a];
fa[a] = getf(y);
size[a] += size[y];
return fa[a];
}
void uni(int a, int b){
a = getf(a);
b = getf(b);
if(a == b)
return ;
else if(size[a] >= size[b]){
size[b] = size[a];
fa[b] = a;
}
else{
size[a] = size[b];
fa[a] = b;
}
}
int main(){
cin>>n>>m;
init();
int a, b;
for(int i = 0; i < m; i++){
cin>>a>>b;
if(getf(a) != getf(b)){
uni(a, b);
cnt--;
}
}
cout<<cnt<<endl;
return 0;
}