AT_joisc2007_fiber 光ファイバー (Fiber) 题解
由题目容易想到用并查集记录联通块个数,再将每个联通块相连。所以答案为联通块个数 \(-1\)。
由于某些特殊性质,本题的输出需要加换行才能通过。
#include<iostream>
#include<cstdio>
using namespace std;
const int N=10100;
int n,m,x,y,fa[N],cnt;
int find1(int dx)
{
return dx==fa[dx]?dx:fa[dx]=find1(fa[dx]);
}
void merge1(int dx,int dy)
{
int gx=find1(dx),gy=find1(dy);
if(gx!=gy) fa[gx]=gy;
}
int main()
{
scanf("%d%d",&n,&m);
for(int i=1;i<=n;i++) fa[i]=i;
for(int i=1;i<=m;i++)
{
scanf("%d%d",&x,&y);
merge1(x,y);
}
for(int i=1;i<=n;i++)
{
if(fa[i]==i) cnt++;
}
printf("%d\n",cnt-1);
return 0;
}

浙公网安备 33010602011771号