Codeforces 445B DZY Loves Chemistry(并查集)

题目链接:Codeforces 445B DZY Loves Chemistry

题目大意:有若干种化学药品,给出两两会反应的关系,现在要将药物依次放入一个容器中,容器中的化学药品可以互相反应,如果当前放入的药品能与已经在容器中的某一药品反应,那么危险值翻倍,即*2,初始值为1,求一顺序,使得为危险值最大。

解题思路:并查集求最小联通分量s,2n?s即为答案。

#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>

using namespace std;
const int maxn = 50;
typedef long long ll;

int n, m, f[maxn+5];

int getfar(int x) {
    return x == f[x] ? x : f[x] = getfar(f[x]);
}

ll power (ll x, int t) {
    ll ans = 1;
    while (t) {
        if (t&1)
            ans = ans * x;

        x = x * x;
        t /= 2;
    }
    return ans;
}

int main () {
    scanf("%d%d", &n, &m);
    for (int i = 0; i <= n; i++)
        f[i] = i;

    int c = n, a, b;
    for (int i = 0; i < m; i++) {
        scanf("%d%d", &a, &b);
        int fa = getfar(a);
        int fb = getfar(b);

        if (fa != fb) {
            f[fa] = fb;
            c--;
        }
    }

    printf("%lld\n", power(2LL, n-c));
    return 0;
}

Codeforces 445B DZY Loves Chemistry(并查集),布布扣,bubuko.com

时间: 2024-10-12 23:47:52

Codeforces 445B DZY Loves Chemistry(并查集)的相关文章

CodeForces 445B. DZY Loves Chemistry(并查集)

转载请注明出处:http://blog.csdn.net/u012860063?viewmode=contents 题目链接:http://codeforces.com/problemset/problem/445/B --------------------------------------------------------------------------------------------------------------------------------------------

CodeForces 445B DZY Loves Chemistry

DZY Loves Chemistry Time Limit:1000MS     Memory Limit:262144KB     64bit IO Format:%I64d & %I64u Submit Status Practice CodeForces 445B Description DZY loves chemistry, and he enjoys mixing chemicals. DZY has n chemicals, and m pairs of them will re

CodeForces - 445B - DZY Loves Chemistry-转化问题

传送门:http://codeforces.com/problemset/problem/445/B 参考:https://blog.csdn.net/littlewhite520/article/details/77018559 题意: 有N种药剂编号 1 ~ N,然后有M种反应关系,这里有一个试管,开始时危险系数为 1,每当放入的药剂和瓶子里面的药剂发生反应时危险系数会乘以2,(注意,不管会发生反映的有几组,只要在同一次加入的,只乘一个2:)否则就不变,给出N个药剂和M种反应关系,求最大的危

BZOJ 3563 DZY Loves Chinese 并查集

题目大意:给定一个无向联通图,q次询问当图中某k条边消失时图是否联通 强制在线 逗比题233 不明白什么意思的去看DZY Loves Chinese II的红字就明白这题为何逗比了0.0 #include <cstdio> #include <cstring> #include <iostream> #include <algorithm> #define M 100100 using namespace std; struct edges{ int x,y

UOJ_14_【UER #1】DZY Loves Graph_并查集

题面:http://uoj.ac/problem/14 考虑只有前两个操作怎么做. 每次删除一定是从后往前删,并且被删的边如果不是树边则没有影响,如果是树边也不存在边能替代. 直接删除这条边就可以. 于是用一个栈来保存现场,然后按秩合并的并查集维护就OK了. 现在有撤回操作,但根据上面对删边分析出的性质. 可以这样: 如果是插入一条边,然后撤回,相当于删边. 如果删边然后撤回,相当于什么也不做. 代码还是很好理解的. 代码: #include <cstdio> #include <cst

Codeforces Round #254 (Div. 2) B. DZY Loves Chemistry (并查集)

题目链接 昨天晚上没有做出来,刚看题目的时候还把题意理解错了,当时想着以什么样的顺序倒,想着就饶进去了, 也被题目下面的示例分析给误导了. 题意: 有1-n种化学药剂  总共有m对试剂能反应,按不同的次序将1-n种试剂滴入试管,如果正在滴入的试剂能与已经滴入 的试剂反应,那么危险数*2,否则维持不变.问最后最大的危险系数是多少. 分析:其实这个题根本不用考虑倒入的顺序,只是分块就行,结果就是每个子集里元素的个数-1 和  的2的幂. 1 #include <iostream> 2 #inclu

Codeforces Round #254 (Div. 2) DZY Loves Chemistry【并查集基础】

一开始不知道题意是啥意思,迟放进去反应和后放进去反应有什么区别 对于第三组数据不是很懂,为啥312,132的组合是不行的 后来发现这是一道考察并查集的题目 QAQ 怒贴代码: 1 #include <stdio.h> 2 #include <string.h> 3 #include <stdlib.h> 4 #include <math.h> 5 #include <iostream> 6 #include <algorithm> 7

DZY Loves Chemistry (并查集)

题目: (??,最近净做并查集了还一道难的都不会) DZY loves chemistry, and he enjoys mixing chemicals. DZY has n chemicals, and m pairs of them will react. He wants to pour these chemicals into a test tube, and he needs to pour them in one by one, in any order. Let's consid

Codeforces 444A DZY Loves Physics(图论)

题目链接:Codeforces 444A DZY Loves Physics 题目大意:给出一张图,图中的每个节点,每条边都有一个权值,现在有从中挑出一张子图,要求子图联通,并且被选中的任意两点,如果存在边,则一定要被选中.问说点的权值和/边的权值和最大是多少. 解题思路:是图论中的一个结论,最多两个节点,所以枚举两条边就可以了.我简单的推了一下,2个点的情况肯定比3个点的优. 假设有3个点a,b,c,权值分别为A,B,C 现a-b,b-c边的权值分别为u,v 那么对于两点的情况有A+Bu,B+