洛谷题解 CF445B 【DZY Loves Chemistry】

题意:有n种药物,其中m对能发生化学反应,容器初始危险度为1,当放入一种药品若和容器中已有物品能发生反应,危险度就乘2,求按一定顺序放入所有药品危险度最大是多少。

思路:能发生反应的药品连成一棵树,同一棵树中的药品按照一定顺序加入就一定可以保证每次加入都发生反应。假设能分成3棵树,数量分别为a,b,c,各个反应次数为a-1,b-1,c-1,又a+b+c=n,所以总反应次数为n-树数。

# include <stdio.h>
# include <math.h>
int pre[51];

int find(int x)
{
    if(x != pre[x])
        pre[x] = find(pre[x]);
    return pre[x];
}
int main()
{
    int n, m, a, b;
    while(~scanf("%d%d",&n,&m))
    {
        int road = 0;
        for(int i=0; i<=n; ++i)
            pre[i] = i;
        while(m--)
        {
            scanf("%d%d",&a,&b);
            int px = find(a);
            int py = find(b);
            if(px != py)
            {
                ++road;
                pre[px] = py;
            }
        }
        printf("%.0f\n",pow(2,road));
    }
    return 0;
}

作者:junior19

来源:CSDN

原文: https://blog.csdn.net/junior19/article/details/55225527/

猜你喜欢

转载自www.cnblogs.com/O52LuoTianYi/p/11388086.html