#include<iostream>
 #include<cstdio>
 #include<cstdlib>
 #include<cstring>
 #define maxn 4000
 using namespace std;
 struct hh
 {
     int to,nxt;
 }b[maxn];
 int head[maxn],dfn[maxn],low[maxn];
 ,df=,de,k=,z,gd;
 bool vis[maxn],g[maxn];
 void link(int x,int y)
 {
     b[++tot].nxt=head[x];
     b[tot].to=y;
     head[x]=tot;
 }
 void tarjan(int x,int rt,int fa)
 {
     dfn[x]=++df;low[x]=df;
     vis[x]=;
     for (int i=head[x];i;i=b[i].nxt)
     {
         int t=b[i].to;
         if (t==fa) continue;
         if (!dfn[t])
         {
             tarjan(t,rt,x);
             low[x]=min(low[x],low[t]);
             ;}
         }
         else if (vis[t]) low[x]=min(low[x],dfn[t]);
     }
 }
 void dfs(int x)
 {
     dfn[x]=k;
     if (g[x]) return ;
     z++;
     for (int i=head[x];i;i=b[i].nxt)
     {
         int t=b[i].to;
         if (g[t]&&dfn[t]!=k) gd++,dfn[t]=k;
         if (!dfn[t]) dfs(t);
     }
 }
 int main()
 {
     ;
     scanf ("%d",&n);
     )
     {
         memset(dfn,,sizeof(dfn));
         memset(b,,sizeof(b));
         memset(head,,sizeof(head));
         memset(low,,sizeof(low));
         memset(vis,,sizeof(vis));
         memset(g,,sizeof(g));
         tot=,df=,de=,k=,z=,gd=;
         ,l=;
         ;
         ;i<=n;++i)
         {
             int x,y;
             scanf ("%d%d",&x,&y);
             link(x,y),link(y,x);
             l=max(max(l,x),y);
         }
         ;i<=l;++i)
         {
             de=;
             );
             ) g[i]=;
         }
         memset(dfn,,sizeof(dfn));
         ;i<=l;++i)
         {
             if (!dfn[i]&&!g[i])
             {
                 k++;z=gd=;
                 dfs(i);
                 ,ans2*=(z-)*z/;
                 ) ans1++,ans2*=z;
             }
         }
         printf("Case %d: %d %lld\n",++cases,ans1,ans2);
         scanf ("%d",&n);
     }
 }

在求割点那里卡了一个多小时

因为之前都完全不知道还有根节点那边的判断啊啊啊TAT

看了好久那几句都没看懂(空想是没有用的啊少年!otz

实际上的话 画画图就差不多了 枚举多种情况

然后主要对每一块分三种情况讨论

有俩割点的时候随你怎么炸 反正炸了一个就跑另一边

有一个割点的话就设一个好了 然后那一个不要放在割点上

没有割点就很心塞了 乖乖设俩吧= =

方案的话就简单的乘一乘就好啦

HNOI 2012 矿场搭建的更多相关文章

  1. [BZOJ 2730][HNOI 2012] 矿场搭建

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

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

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

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

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

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

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

  5. bzoj2730(矿场搭建)

    矿场搭建,不知道为什么,莫名其妙T了在212上,额,zyh数据真的坑. bzoj200轻松跑过啊. 就是点双联通分量缩点,然后标记割点,一个块如果有>=2个割点,则不需要挖矿洞, 如果只有一割点 ...

  6. 【CJOJ P1333】【HNOI2012】矿场搭建

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

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

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

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

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

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

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

随机推荐

  1. Less的转义字符

    Less的转义字符 有时候,当需要引入无效的CSS语法或Less不能识别的字符,就需要使用转义字符.此时,就可以在字符串前面加一个 ~,并将需要转义的字符串放在 "" 中.格式为: ...

  2. zzuli 1815: easy problem 打表

    1815: easy problem Time Limit: 1 Sec  Memory Limit: 128 MB Submit: 243  Solved: 108 SubmitStatusWeb ...

  3. esp8266 SDK开发之编译流程

    最近刚完成自己8266的小项目,已经发布在github上,有兴趣的朋友可以看一下 github地址:esp-ujn 1. 通过MQTT协议与服务器交互 2. 内置HTTP服务器,支持通过浏览器进行参数 ...

  4. linux用户、组、权限问题

    用户.组.权限一.权限:r, w, x1.文件权限:      r:可读,可以使用类似cat等命令查看文件内容:      w:可写,可以编辑或删除此文件:      x: 可执行,eXacutabl ...

  5. IDEA 无法运行Junit, 报错Class not found xxxx Empty test suite.

    网上搜了一圈没找到答案, 最后才发现是因为testmodule没有把class编译到主代码编译的路径.

  6. extjs 关于dom操作的几个库

    经过几天的学习研究,发现ext与jquery的设计思路完全是来自两个方向. jquery是内聚,把所有东西都放在$的下面,而ext是采用分模块的设计思路,每个功能封装一个库.这样就形成了各自的实用风格 ...

  7. ASP.NET Core Web API下事件驱动型架构的实现(一):一个简单的实现

    很长一段时间以来,我都在思考如何在ASP.NET Core的框架下,实现一套完整的事件驱动型架构.这个问题看上去有点大,其实主要目标是为了实现一个基于ASP.NET Core的微服务,它能够非常简单地 ...

  8. DEBUG技巧-设定合适的日志级别

    有些技能只有踩过坑的人才能够掌握,能用来避免后来的坑,很多时候是用凌晨的时间换来的,我们通常把他叫做经验. 故事 这个一个关于springmvc的坑的故事. 某天晚上本打算一个小功能分分钟搞定上线,但 ...

  9. 《31天成为IT服务达人》最新文件夹

    在网上发帖后.得到广大博友的关心与帮助,提了不少好的建议和意见,本人把书稿再次做了修改,现把章节发给大家,欢迎拍砖!呵呵. 机遇篇   第一章奇葩的IT男 1.1     半年月薪过万 1.2     ...

  10. POJ 3616 Milking Time DP题解

    典型的给出区间任务和效益值,然后求最大效益值的任务取法. 属于一维DP了. 一维table记录的数据含义:到当前任务的截止时间前的最大效益值是多少. 注意. 这表示当前任务一定要选择,可是终于结果是不 ...