您的位置:首页 > 其它

Codeforces 445B DZY Loves Chemistry

2016-07-20 19:15 274 查看
题意:

给你n种元素,m种反应,每反应一次答案*2,问答案最大值为多少。

思路:

n种元素,最多反应n-1次,能反映的元素归于统一集合,不管集合中的元素如何放置都能反应集合元素个数-1次,那么我们根据这个性质,利用并查集维护集合,最后统计下就可以了。

#include<cstdio>
typedef __int64 LL;

const int MAX=55;
int n,m,p[MAX];

int Find(int x){
int r=x;
while(r!=p[r]){
r=p[r];
}
int t;
while(x!=r){
t=p[x];
p[x]=r;
x=t;
}
return r;
}

void Union(int u,int v){
int a=Find(u);
int b=Find(v);
if(a!=b){
p[a]=b;
}
}

int main(){
scanf("%d%d",&n,&m);
for(int i=1;i<=n;i++){
p[i]=i;
}
while(m--){
int u,v;
scanf("%d%d",&u,&v);
Union(u,v);
}
LL ans=1LL<<n;
for(int i=1;i<=n;i++){
if(p[i]==i) ans=ans>>1;
}
printf("%I64d\n",ans);
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: