记录编号 |
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;
- }