time limit per test

1 second

memory limit per test

256 megabytes

input

standard input

output

standard output

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 consider the danger of a test tube. Danger of an empty test tube is 1. And every time when DZY pours a chemical, if there are already one or more chemicals
in the test tube that can react with it, the danger of the test tube will be multiplied by 2. Otherwise the danger remains as it is.

Find the maximum possible danger after pouring all the chemicals one by one in optimal order.

Input

The first line contains two space-separated integers n and m .

Each of the next m lines contains two space-separated integers xi and yi (1 ≤ xi < yi ≤ n).
These integers mean that the chemical xi will
react with the chemical yi.
Each pair of chemicals will appear at most once in the input.

Consider all the chemicals numbered from 1 to n in some order.

Output

Print a single integer — the maximum possible danger.

Sample test(s)
input
1 0
output
1
input
2 1
1 2
output
2
input
3 2
1 2
2 3
output
4
Note

In the first sample, there's only one way to pour, and the danger won't increase.

In the second sample, no matter we pour the 1st chemical first, or pour the 2nd
chemical first, the answer is always 2.

In the third sample, there are four ways to achieve the maximum possible danger: 2-1-3, 2-3-1, 1-2-3 and 3-2-1 (that is the numbers of the chemicals in order of pouring).


#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm> using namespace std; int main()
{
int n, m;
int x, y;
int a[105];
__int64 ans=1;
scanf("%d%d", &n, &m);
for(int i=1; i<=n; i++)
a[i] = i;
for(int i=0; i<m; i++)
{
scanf("%d%d", &x, &y);
while(a[x] != x)
x = a[x];
while(a[y]!=y)
y = a[y];
if(x!=y)
ans*=2;
a[y] = x;
}
printf("%I64d\n",ans); return 0;
}

最新文章

  1. 数论初步(费马小定理) - Happy 2004
  2. Delphi7下SuperObject的JSON使用方法
  3. 日志基本概念/rSyslog
  4. 2014年辛星完全解读Javascript第四节 流程控制语句
  5. 编写一个程序,从标准输入中读取若干string对象并查找连续重复出现的单词。所谓连续重复出现的意思是:一个单词后面紧跟着这个单词本身。要求记录连续重复出现的最大次数以及对应的单词
  6. Handsontable通用方法
  7. Linux 基础(3)
  8. 蓝桥杯-猜年龄-java
  9. SSH框架的多表查询(方法二)增删查改
  10. 【SICP练习】151 练习4.7
  11. 使用laraval框架和前端完成restful风格的请求对接(这里只是讨论restful的概念)
  12. 基于SVG.js实现网页初始化线条描绘效果
  13. BZOJ3199 SDOI2013 逃考 半平面交、最短路
  14. vbox 的 ova 提取vmdk 与 vdi 以及扩容
  15. linux中权限对文件和目录的意义
  16. js继承的几种类型
  17. WPF编程,使用WindowChrome实现自定义窗口功能的一种方法。
  18. [web 前端] web本地存储(localStorage、sessionStorage)
  19. 【leetcode 简单】 第六十六题 用栈实现队列
  20. jQuery碎语(3) 动画特效

热门文章

  1. BZOJ 4128 Matrix ——BSGS
  2. [BZOJ1604] [Usaco2008 Open]Cow Neighborhoods 奶牛的邻居(好题)
  3. 洛谷P2522 - [HAOI2011]Problem b
  4. 算法复习——单调队列(sliding windows,ssoi)
  5. 洛谷P1435 回文字串
  6. [USACO08DEC]Trick or Treat on the Farm (拓扑排序,DP)
  7. bzoj2144 跳跳棋 二分
  8. cf287D Shifting
  9. Java的反射机制和动态代理
  10. ElasticSearch API 之 GET