#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. 如何访问 Service?- 每天5分钟玩转 Docker 容器技术(99)

    前面我们已经学习了如何部署 service,也验证了 swarm 的 failover 特性.不过截止到现在,有一个重要问题还没有涉及:如何访问 service?这就是本节要讨论的问题. 为了便于分析 ...

  2. 企业级监控zabbix基础

    一个标准的监控系统所具备的基本功能: 1.数据的采集 2.为了展示其长期走势,将数据存储下来 3.万一某次采样的结果不在被认为是合理的范围内,然后就会做出告警操作,尽早的让相关人员得知到此消息 4.展 ...

  3. linux 查看cpu个数,内存情况,系统版本

    查看cpu个数 总核数 = 物理CPU个数 * 每颗物理CPU的核数 总逻辑CPU数 = 物理CPU个数 * 每颗物理CPU的核数 * 超线程数 查看物理CPU个数 cat /proc/cpuinfo ...

  4. C#在自定义事件里传递自定义数据,使用EventArgs的姿势

    EventArgs是包含事件数据的类的基类,用于传递事件的细节.今天分享的是使用泛型来约束EventArgs,在事件里传递自定义数据的例子. 正题 由于这个关注点很小,直接上代码了. 定义泛型类TEv ...

  5. 天梯赛 L2-020. 功夫传人 BFS

    L2-020. 功夫传人 时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 陈越 一门武功能否传承久远并被发扬光大,是要看缘分的.一般来 ...

  6. 微信JS-SDK选择相册或拍照并上传PHP实现

    理解:微信上传接口是拍照,或者选择本地照片,上传到微信的服务器,获取到一个id,通过token与这个id获取到图片,保存到服务器即可. 效果 通过微信js接口,调用底层程序. 需要引入js文件,并进行 ...

  7. 为并发而生的 ConcurrentHashMap(Java 8)

    HashMap 是我们日常最常见的一种容器,它以键值对的形式完成对数据的存储,但众所周知,它在高并发的情境下是不安全的.尤其是在 jdk 1.8 之前,rehash 的过程中采用头插法转移结点,高并发 ...

  8. 安卓图片加载框架之Glide框架

    Glide框架加载有两种,第一,是加载图片,第二是加载布局背景.首先我来说说第一种情况加载图片. Glide.with(getActivity()).load(lists.get(position). ...

  9. 通过Javascript调用微软认知服务情感检测接口的两种实现方式

    这是今天在黑客松现场写的代码.我们的项目需要调用认知服务的情感识别接口.官方提供了一种方式,就是从一个远程图片进行识别.我另外写了一个从本地文件读取并上传进行识别的例子. 官方文档,请参考 https ...

  10. IP协议和网络传输中的封装与分用。

    关于七层模型和四层模型可以参考这个:http://www.cnblogs.com/xcywt/p/5027277.html 因为四层模型用的比较多,这里只拿四层模型来分析. 1.四层模型中的最下层是链 ...