1. #include<cstdio>
  2. #include<cstring>
  3. #include<iostream>
  4. #define M 508
  5. using namespace std;
  6. int T=,m,n,head[M],K,next[*M],u[*M],cnt,f[M],c[M],fa[M],dfn[M],low[M],time1,ans,bi[M],sum[M];
  7. long long ans1=;
  8. void jia(int a1,int a2)
  9. {
  10. cnt++;
  11. next[cnt]=head[a1];
  12. head[a1]=cnt;
  13. u[cnt]=a2;
  14. }
  15. void tarjin(int a1,int deep)
  16. {
  17. time1++;
  18. dfn[a1]=low[a1]=time1;
  19. c[a1]=-;
  20. int tot=;
  21. for(int i=head[a1];i;i=next[i])
  22. if(u[i]!=fa[a1])
  23. {
  24. fa[u[i]]=a1;
  25. if(!c[u[i]])
  26. {
  27. tarjin(u[i],deep+);
  28. low[a1]=min(low[a1],low[u[i]]);
  29. tot++;
  30. if(deep==&&tot>)
  31. f[a1]=;
  32. if(deep>&&low[u[i]]>=dfn[a1])
  33. f[a1]=;
  34. }
  35. else if(c[u[i]]==-&&u[i]!=fa[a1])
  36. low[a1]=min(low[a1],dfn[u[i]]);
  37. }
  38. c[a1]=;
  39. }
  40. void dfs(int a1)
  41. {
  42. c[a1]=;
  43. if(!bi[a1])
  44. bi[a1]=time1;
  45. else
  46. bi[a1]=-;
  47. for(int i=head[a1];i;i=next[i])
  48. if(!c[u[i]]&&!f[u[i]])
  49. dfs(u[i]);
  50. return;
  51. }
  52. int main()
  53. {
  54. for(;scanf("%d",&m),m;T++){
  55. ans=cnt=n=;
  56. ans1=;
  57. memset(head,,sizeof(head));
  58. memset(bi,,sizeof(bi));
  59. memset(f,,sizeof(f));
  60. memset(sum,,sizeof(sum));
  61. for(int i=;i<=m;i++)
  62. {
  63. int a1,a2;
  64. scanf("%d%d",&a1,&a2);
  65. n=max(n,a1);
  66. n=max(n,a2);
  67. jia(a1,a2);
  68. jia(a2,a1);
  69. }
  70. time1=;
  71. for(int i=;i<=n;i++)
  72. {
  73. f[i]=;
  74. c[i]=;
  75. fa[i]=;
  76. }
  77. tarjin(,);
  78. time1=;
  79. for(int i=;i<=n;i++)
  80. if(f[i])
  81. {
  82. memset(c,,sizeof(c));
  83. for(int j=head[i];j;j=next[j])
  84. if(!c[u[j]]&&!f[u[j]])
  85. {
  86. time1++;
  87. dfs(u[j]);
  88. }
  89. }
  90. for(int i=;i<=n;i++)
  91. if(bi[i]!=-)
  92. sum[bi[i]]++;
  93. for(int i=;i<=time1;i++)
  94. if(sum[i])
  95. {
  96. ans++;
  97. ans1*=sum[i];
  98. }
  99. printf("Case %d: ",T);
  100. if(ans)
  101. printf("%d %lld\n",ans,ans1);
  102. else
  103. printf("2 %d\n",n*(n-)/);}
  104. return ;
  105. }

先用tarjin找割点 割点条件u1是树根,且有大于1棵子树,u1不是树根,low[u[i]]>dfn[u1],把和一个割点相连的联通块建出口。

bzoj 2730: [HNOI2012]矿场搭建的更多相关文章

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

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

  2. 【刷题】BZOJ 2730 [HNOI2012]矿场搭建

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

  3. bzoj 2730: [HNOI2012]矿场搭建——tarjan求点双

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

  4. bzoj 2730: [HNOI2012]矿场搭建【tarjan】

    先tarjan找割点和点双连通分量,然后对一个点双,如果没有割点,那么需要建立两个出口(割掉一个另一个备用):如果只有一个割点,出口可以设立在任意一个非割点的地方:如果有两个及以上个割点,就不用建出口 ...

  5. 【BZOJ】2730: [HNOI2012]矿场搭建【Tarjan找割点】【分联通块割点个数】

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

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

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

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

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

  8. BZOJ 2730:[HNOI2012]矿场搭建(割点+连通块)

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

  9. 洛谷 P3225 [HNOI2012]矿场搭建 解题报告

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

随机推荐

  1. [转载] DevOps年中盘点:国外最受欢迎的10篇技术文章

    本文根据高效运维系列微信群的群友投稿整理而成.“高效运维”公众号作为本系列群的官方唯一公众号,原创并独家首发. 欢迎关注“高效运维”公众号,以免费参加「运维讲坛」每月一次的线下交流活动:并抢先赏阅干货 ...

  2. [转载] C++ STL string的Copy-On-Write技术

    原文: http://coolshell.cn/articles/12199.html stl的string是经过严格优化的, 深入理解对以后编程过程中应用string非常有益处, 感谢左耳朵耗子的精 ...

  3. mysql 聚集函数需要注意的问题

    1.当没有记录的时候,使用聚集函数,会导致出现一条记录,记录的取值都是NULL,如下:mysql> select name from student where name='David';Emp ...

  4. mysql 内连接 左连接 右连接 外连接

    mysql> desc student;+-------+-------------+------+-----+---------+-------+| Field | Type | Null | ...

  5. AJAX的简介

    AJAX 指异步JavaScript及XML(Asynchronous JavaScript And XML(异步JavaScript和XML)),是指一种创建交互式网页应用的网页开发技术. 国内通常 ...

  6. HBase之过滤器

    filter ==> SQL 中的Where filter的执行流程: 过滤器在客户端创建,然后通过RPC发送到服务器上,由服务器执行   基础过滤器:   比较器: Comparator  D ...

  7. jQuery Ajax学习

    地址:http://www.w3school.com.cn/jquery/jquery_ref_ajax.asp

  8. Android M 特性 Doze and App Standby模式详解

    版权声明:本文由郑桂涛原创文章,转载请注明出处: 文章原文链接:https://www.qcloud.com/community/article/185 来源:腾云阁 https://www.qclo ...

  9. 解决PhoneGap不支持viewport的几种方法

    前几天用phonegap编译GameBuilder+CanTK时,发现HTML里的viewport无效.CanTK根据devicePixelRatio检测设备的DPI,然后用viewport设置正确的 ...

  10. 核心Javascript学习

    1. 引言: 1.1. 网页三要素: l HTML(内容) l CSS(外观) l Javascript(行为) 1.2.  OOP的相关概念 1). 对象,方法和属性 l 对象就是指"事物 ...