矿场搭建,不知道为什么,莫名其妙T了在212上,额,zyh数据真的坑。

bzoj200轻松跑过啊。

就是点双联通分量缩点,然后标记割点,一个块如果有>=2个割点,则不需要挖矿洞,

如果只有一割点,就乘以改块的大小-1

如果无割点,则乘以C(size,2);

  1. #include<cstdio>
  2. #include<cstring>
  3. #include<iostream>
  4. #include<algorithm>
  5. #include<cmath>
  6. #include<vector>
  7. using namespace std;
  8.  
  9. typedef long long ll;
  10. const int NN=;
  11.  
  12. int n,m;
  13. int tim,top,root,scc;
  14. int cnt,head[NN],rea[NN*],next[NN*];
  15. int dfn[NN],low[NN],q[NN],instack[NN],gedian[NN],num[NN];
  16. vector<int>a[NN];
  17.  
  18. void init()
  19. {
  20. n=tim=top=scc=;
  21. memset(head,-,sizeof(head));
  22. memset(dfn,,sizeof(dfn));
  23. memset(gedian,,sizeof(gedian));
  24. memset(num,,sizeof(num));
  25. }
  26. void add(int u,int v)
  27. {
  28. cnt++;
  29. next[cnt]=head[u];
  30. head[u]=cnt;
  31. rea[cnt]=v;
  32. }
  33. void Tarjan(int u,int fa)
  34. {
  35. int num=;
  36. dfn[u]=low[u]=++tim;
  37. q[++top]=u,instack[u]=;
  38. for (int i=head[u];i!=-;i=next[i])
  39. {
  40. int v=rea[i];
  41. if (v==fa) continue;
  42. if (dfn[v]==)
  43. {
  44. Tarjan(v,u);
  45. low[u]=min(low[u],low[v]);
  46. num++;
  47. if (u==root&&num>) gedian[u]=;
  48. else if (u!=root&&low[v]>=dfn[u]) gedian[u]=;
  49. if (low[v]>=dfn[u])
  50. {
  51. scc++;
  52. a[scc].clear();
  53. int x=-;
  54. while (x!=u)
  55. {
  56. x=q[top--];
  57. instack[x]=;
  58. a[scc].push_back(x);
  59. }
  60. q[++top]=u,instack[u]=;
  61. }
  62. }
  63. else low[u]=min(low[u],dfn[v]);
  64. }
  65. }
  66. long long c(int n,int m)
  67. {
  68. long long res=n*(n-)/;
  69. return res;
  70. }
  71. int main()
  72. {
  73. int fzy=;
  74. while(scanf("%d",&m)&&m)
  75. {
  76. fzy++;
  77. init();
  78. int x,y;
  79. for (int i=;i<=m;i++)
  80. {
  81. scanf("%d%d",&x,&y);
  82. add(x,y),add(y,x);
  83. n=max(x,n),n=max(y,n);
  84. }
  85. for (int i=;i<=n;i++)
  86. if (dfn[i]==)
  87. {
  88. root=i;
  89. Tarjan(i,-);
  90. }
  91. for (int i=;i<=scc;i++)
  92. for (int j=;j<a[i].size();j++)
  93. if (gedian[a[i][j]]) num[i]++;
  94. long long ans1=,ans2=;
  95. for (int i=;i<=scc;i++)
  96. {
  97. if (num[i]==)
  98. {
  99. ans1+=;
  100. ans2*=c(a[i].size(),);
  101. }
  102. else if (num[i]==)
  103. {
  104. ans1+=;
  105. ans2*=a[i].size()-;
  106. }
  107. }
  108. printf("Case %d: %lld %lld\n",fzy,ans1,ans2);
  109. }
  110. return ;
  111. }

bzoj2730(矿场搭建)的更多相关文章

  1. bzoj2730矿场搭建(Tarjan割点)

    2730: [HNOI2012]矿场搭建 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 1771  Solved: 835[Submit][Statu ...

  2. [BZOJ2730]矿场搭建

    Description 煤矿工地可以看成是由隧道连接挖煤点组成的无向图.为安全起见,希望在工地发生事故时所有挖煤点的工人都能有一条出路逃到救援出口处.于是矿主决定在某些挖煤点设立救援出口,使得无论哪一 ...

  3. bzoj2730矿场搭建——点双连通分量

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=2730 首先一遍tarjan找出割点,将图缩点,这些大点中如果有只包含一个割点的,那么如果这个 ...

  4. BZOJ2730 矿场搭建 解题报告 点双联通分量

    题意概述: 一张有向图,在其中设置一些关键点(即题目中的逃生出口),使得删除任意一个点之后其余点都可以到达至少一个关键点. 问至少需要设置多少中关键点,有多少种设置方法. 解析: 首先,这道题要求删掉 ...

  5. 【BZOJ2730】[HNOI2012]矿场搭建 Tarjan

    [BZOJ2730][HNOI2012]矿场搭建 Description 煤矿工地可以看成是由隧道连接挖煤点组成的无向图.为安全起见,希望在工地发生事故时所有挖煤点的工人都能有一条出路逃到救援出口处. ...

  6. 【BZOJ-2730】矿场搭建 Tarjan 双连通分量

    2730: [HNOI2012]矿场搭建 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 1602  Solved: 751[Submit][Statu ...

  7. bzoj2730 [HNOI2012]矿场搭建 (UVAlive5135 Mining Your Own Business)

    2730: [HNOI2012]矿场搭建 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 1147  Solved: 528[Submit][Statu ...

  8. [BZOJ2730][HNOI2012]矿场搭建 点双 割点

    2730: [HNOI2012]矿场搭建 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 2852  Solved: 1344[Submit][Stat ...

  9. BZOJ 2730: [HNOI2012]矿场搭建( tarjan )

    先tarjan求出割点.. 割点把图分成了几个双连通分量..只需dfs找出即可. 然后一个bcc有>2个割点, 那么这个bcc就不用建了, 因为一定可以走到其他救援出口. 只有一个割点的bcc就 ...

随机推荐

  1. webservice中jaxws:server 和jaxws:endpoint的区别

    今天在学习使用spring+cxf发布webservice时遇到个问题,我原来是用 <jaxws:endpoint id="helloWorld" implementor=& ...

  2. 最近找java实习面试被问到的东西总结(Java方向)

    时间,就是这么很悄悄的溜走了将近两个年华,不知不觉的,研二了,作为一个一般学校的研究生,不知道该说自己是不学无术,还是说有过努力,反正,这两年里,有过坚持,有过堕落,这不,突然间,有种开窍的急迫感,寻 ...

  3. js script放在head和body里面的区别

    详见: http://blog.yemou.net/article/query/info/tytfjhfascvhzxcytp66       java script放在head和body的区别   ...

  4. CVE-2016-10190 FFmpeg Http协议 heap buffer overflow漏洞分析及利用

    作者:栈长@蚂蚁金服巴斯光年安全实验室 -------- 1. 背景 FFmpeg是一个著名的处理音视频的开源项目,非常多的播放器.转码器以及视频网站都用到了FFmpeg作为内核或者是处理流媒体的工具 ...

  5. 正则语言引擎:一个简单LEX和YACC结合运用的实例

    本文先描述了LEX与YACC的书写方法.然后利用LEX与YACC编写了一个简单正则语言的引擎(暂时不支持闭包与或运算),生成的中间语言为C语言. 正则引擎应直接生成NFA或DFA模拟器的输入文件,但在 ...

  6. JS嵌套循环的典型练习题

    1.斐波那契数列 ①分数 <script type="text/javascript">    var a = 1   var b = 1   var c    for ...

  7. 转:【Java集合源码剖析】Vector源码剖析

    转载请注明出处:http://blog.csdn.net/ns_code/article/details/35793865   Vector简介 Vector也是基于数组实现的,是一个动态数组,其容量 ...

  8. Scrapy 爬虫入门 +实战

    爬虫,其实很早就有涉及到这个点,但是一直没有深入,今天来搞爬虫.选择了,scrapy这个框架 http://scrapy-chs.readthedocs.io/zh_CN/0.24/intro/tut ...

  9. Git 指南 -- 什么应该被纳入管理?

    Git 指南 -- 什么应该被纳入管理? 如果还不了解Git是什么,可以先阅读这篇博文:http://www.cnblogs.com/schaepher/p/5561193.html 是作品,而不是产 ...

  10. 201521123003《Java程序设计》第5周学习总结

    1. 本章学习总结 1.1 尝试使用思维导图总结有关多态与接口的知识点. 参考资料: 百度脑图 XMind 2. 书面作业 Q1.代码阅读:Child压缩包内源代码 1.1 com.parent包中C ...