记录编号 |
302792 |
评测结果 |
AAAAAAAAAA |
题目名称 |
宗教信仰 |
最终得分 |
100 |
用户昵称 |
liu_runda |
是否通过 |
通过 |
代码语言 |
C++ |
运行时间 |
1.050 s |
提交时间 |
2016-09-04 16:59:53 |
内存使用 |
0.95 MiB |
显示代码纯文本
#include<cstdio>
#include<cctype>
int read(){
int x;char ch;
while(ch=getchar(),!isdigit(ch));
x=ch-'0';
while(ch=getchar(),isdigit(ch))x=x*10+ch-'0';
return x;
}
const int maxn=100005;
int ufs[maxn],sz[maxn];
int find(int x){
int rt=x;
while(rt!=ufs[rt])rt=ufs[rt];
int y;
while(x!=ufs[x]){
y=ufs[x];
ufs[x]=rt;
x=y;
}
return rt;
}
void link(int a,int b){
if(find(a)==find(b))return;
if(sz[ufs[a]]>sz[ufs[b]]){
sz[ufs[a]]+=sz[ufs[b]];
ufs[ufs[b]]=ufs[a];
}else{
sz[ufs[b]]+=sz[ufs[a]];
ufs[ufs[a]]=ufs[b];
}
}
int main(){
freopen("religion.in","r",stdin);
freopen("religion.out","w",stdout);
int n=read(),m=read();
for(int i=1;i<=n;++i)ufs[i]=i,sz[i]=1;
int ans=0,a,b;
while(m--){
a=read();b=read();
link(a,b);
}
for(int i=1;i<=n;++i)if(ufs[i]==i)ans++;
printf("%d\n",ans);
fclose(stdin);fclose(stdout);
return 0;
}