链接:http://codeforces.com/contest/445/problem/B

描述:n种药品,m个反应关系,按照一定顺序放进试管中。如果当前放入的药品与试管中的药品要反应,危险系数变为之前的2倍;否则危险系数不改变。起始危险系数为1。求可能的最大的危险系数。

思路:遍历图

在图上画一画,就会发现,只要一块连通的图中的一个点放入后,之后每添加这块图中的一个点就会导致危险系数乘2。那么我们只需要找到一共有多少个连通图tmp,然后用总数减去得到ans。答案就是1LL<<ans。注意long long的位运算要记得在1后面加上LL!!!

我的实现:

 1 #include <iostream>
2 #include <cstdio>
3 #include <cstring>
4 using namespace std;
5 #define MaxN 60
6 #define MaxM 1250
7 typedef long long llt;
8 struct node
9 {
10 int v;
11 node *next;
12 };
13 node Edge[MaxM*2];
14 node *cnt=&Edge[0];
15 node *adj[MaxN];
16 bool vis[MaxN];
17 llt ans;
18 int n,m;
19 inline void Get_int(int &Ret)
20 {
21 char ch;
22 bool flag=false;
23 for(;ch=getchar(),ch<'0'||ch>'9';)
24 if(ch=='-')
25 flag=true;
26 for(Ret=ch-'0';ch=getchar(),ch>='0'&&ch<='9';Ret=Ret*10+ch-'0');
27 flag&&(Ret=-Ret);
28 }
29 inline void Addedge(int u,int v)
30 {
31 node *p=++cnt;
32 p->v=v;
33 p->next=adj[u];
34 adj[u]=p;
35
36 p=++cnt;
37 p->v=u;
38 p->next=adj[v];
39 adj[v]=p;
40 }
41 void Read()
42 {
43 Get_int(n);Get_int(m);
44 int i,j,k;
45 for(i=1;i<=m;++i)
46 {
47 Get_int(j);Get_int(k);
48 Addedge(j,k);
49 }
50 }
51 llt Dfs(int u)
52 {
53 vis[u]=true;
54 llt Ret=1;
55 for(node *p=adj[u];p;p=p->next)
56 if(!vis[p->v])
57 Ret+=Dfs(p->v);
58 return Ret;
59 }
60 void Solve()
61 {
62 int i;
63 ans=0;
64 for(i=1;i<=n;++i)
65 if(!vis[i])
66 ans+=(Dfs(i)-1);
67 ans=1LL<<ans;
68 printf("%I64d\n",ans);
69 }
70 int main()
71 {
72 Read();
73 Solve();
74 return 0;
75 }

效率:

最新文章

  1. GDB调试32位汇编堆栈分析
  2. Android下Cocos2d创建HelloWorld工程
  3. AudioCapabilities成员
  4. BaaS服务的定义、发展以及未来
  5. firefox 中碰到的一个小坑
  6. PCL—低层次视觉—关键点检测(rangeImage)
  7. 【代码优化】坚持使用Override注解
  8. java 内存区域中的栈
  9. Redis + keepalived 高可用群集搭建
  10. For oracle databases, if the top showing the oracle database, then oracle process is using the top c
  11. button JS篇ant Design of react
  12. 痞子衡嵌入式:ARM Cortex-M文件那些事(1)- 源文件(.c/.h/.s)
  13. Spring Cloud 学习记录
  14. c语言实现两个单链表的交叉合并
  15. 二、工作中常用的SQL优化
  16. 查询数据库中的表格---通过构造方法将数据存入到List集合中---遍历进行输出
  17. Web 前端 注意知识点
  18. Linux shell(1)
  19. bzoj 1336 最小圆覆盖
  20. c语言实现类似重载的功能

热门文章

  1. 【分享代码】bash中对一个逗号分隔的列表去重
  2. JUC之文章整理以及汇总
  3. Qt之图片
  4. gin框架中的数据解析与绑定
  5. Android 资源溢出崩溃轻松解
  6. 1. idea spark scala 语言支持设置
  7. 技术管理进阶——Leader应该关注成长慢的同学吗?
  8. (DDS)正弦波形发生器——幅值、频率、相位可调(一)
  9. 【HTML】table表格拆分合并(colspan、rowspan)
  10. Java 变量的声明及初始化