• codeforces 445 B DZY Loves Chemistry【并查集】


    题意:给出n种化学物质,其中m对会发生化学反应,每次加入化学物质进去的时候,

    如果有能够和它发生反应的,危险值就乘以2,问怎样的放入顺序使得危险值最大

    将这m对会反应的用并查集处理,统计每个连通块里面的元素个数,再将其减去1,加起来,就是2的指数

     1 #include<iostream>  
     2 #include<cstdio>  
     3 #include<cstring> 
     4 #include <cmath> 
     5 #include<stack>
     6 #include<vector>
     7 #include<map> 
     8 #include<set>
     9 #include<queue> 
    10 #include<algorithm>  
    11 using namespace std;
    12 
    13 #define foreach(i,c) for (__typeof(c.begin()) i = c.begin(); i != c.end(); ++i)
    14 
    15 typedef long long LL;
    16 const int INF = (1<<30)-1;
    17 const int mod=1000000007;
    18 const int maxn=100005;
    19 
    20 int p[maxn];
    21 vector<int> g[maxn];
    22 
    23 int find(int x){ return x==p[x]? x:p[x]=find(p[x]);}
    24 
    25 LL pow_my(int x){
    26     LL ans=1;
    27     for(int i=1;i<=x;i++) ans=(LL)ans*2;
    28     return ans;
    29 }
    30 
    31 int main(){
    32     int n,m;
    33     cin>>n>>m;
    34     for(int i=1;i<=n;i++) p[i]=i;
    35     
    36     while(m--){
    37         int u,v;
    38         cin>>u>>v;
    39         int x=find(u);
    40         int y=find(v);
    41         if(x!=y) p[x]=y;
    42     }
    43     
    44     for(int i=1;i<=n;i++){
    45         int x=find(i);
    46         g[x].push_back(i);
    47     }
    48     
    49     int ans=0;
    50     for(int i=1;i<=n;i++){
    51         if(g[i].size()!=0) ans+=g[i].size()-1;
    52     }
    53         
    54     cout<<pow_my(ans)<<"
    ";
    55     
    56     return 0;
    57 }
    View Code
  • 相关阅读:
    ajax跨域
    抽奖概率计算
    应用版本
    empty
    java线程池原理
    java队列
    jquery选择器项目实例分析
    jquery操作dom
    40款非常棒的 jQuery 插件和制作教程(系列一)
    vijosP1046 观光旅游(最小环)
  • 原文地址:https://www.cnblogs.com/wuyuewoniu/p/4481633.html
Copyright © 2020-2023  润新知