Description

煤矿工地可以看成是由隧道连接挖煤点组成的无向图。为安全起见,希望在工地发生事故时所有挖煤点的工人都能有一条出路逃到救援出口处。于是矿主决定在某些挖煤点设立救援出口,使得无论哪一个挖煤点坍塌之后,其他挖煤点的工人都有一条道路通向救援出口。请写一个程序,用来计算至少需要设置几个救援出口,以及不同最少救援出口的设置方案总数。
 

Sulotion

坍塌的不是割顶并不影响,建在割顶也没有意义(拆割顶)

考虑每一个双连通分量,如果只连一个割顶必须内部建一个(随便选一个),连两个以上可以不用建(一个割顶坍塌还可以走另一个)

特殊情况是,如果无割顶建两个

并不需要求出双连通分量,把割顶求出删掉,dfs处理时统计即可

说起来这道题也是WF2011,HNOI竟然考原题。。

Code

一开始一直WA,copy标程大力对拍,结果是特殊情况忘输出case...范逗

接着拍,还是不对,调半天搞出一组小数据,然后发现标程错了...世界再见...这种事情以前就出现过一次...所以还是要自己老老实实写暴力对拍?

 #include<cstdio>
#include<algorithm>
#include<vector>
#include<cstring>
using namespace std;
const int maxn=; int pre[maxn],low[maxn],iscut[maxn],bcc[maxn];
int clock,cnt,size[maxn],t[maxn],vis[maxn];
vector<int>e[maxn];
int n,m; int clear(){
memset(pre,,sizeof(pre));
memset(low,,sizeof(low));
memset(iscut,,sizeof(iscut));
memset(bcc,,sizeof(bcc));
memset(size,,sizeof(size));
memset(t,,sizeof(t));
memset(vis,,sizeof(vis));
for(int i=;i<maxn;i++) e[i].clear();
clock=cnt=n=;
} int getcut(int p,int u){
pre[u]=low[u]=++clock;
int child=;
for(int i=;i<e[u].size();i++){
int v=e[u][i];
if(!pre[v]){
child++;
getcut(u,v);
low[u]=min(low[u],low[v]);
if(low[v]>=pre[u]){
iscut[u]=;
}
}
else if(pre[v]<pre[u]&&v!=p){
low[u]=min(low[u],pre[v]);
}
}
if(p==&&child==) iscut[u]=;
} int dfs(int u){
vis[u]=cnt,size[cnt]++;
for(int i=;i<e[u].size();i++){
int v=e[u][i];
if(vis[v]) continue;
if(!iscut[v]) dfs(v);
else {
if(bcc[v]!=cnt)
bcc[v]=cnt,t[cnt]++;
}
}
} int main(){
//freopen("2730.in","r",stdin);
//freopen("2730a.out","w",stdout); int time=;
while(scanf("%d",&m)==&&m){
clear();
int u,v; for(int i=;i<=m;i++){
scanf("%d%d",&u,&v);
e[u].push_back(v);
e[v].push_back(u);
n=max(n,max(u,v));
} for(int i=;i<=n;i++)
if(!pre[i]) getcut(,i); for(int i=;i<=n;i++)
if(!iscut[i]&&!vis[i]){
++cnt;
dfs(i);
} if(cnt==){
printf("Case %d: 2 %d\n",++time,n*(n-)/);
continue;
} long long tot=,ans=;
for(int i=;i<=cnt;i++)
if(t[i]==) tot++,ans*=size[i];
printf("Case %d: %lld %lld\n",++time,tot,ans);
}
}

【双连通分量】Bzoj2730 HNOI2012 矿场搭建的更多相关文章

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

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

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

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

  3. BZOJ2730 [HNOI2012]矿场搭建[点双连通分量]

    看到删去一个点,需要剩下的都和关键点连通,有端联想到找点双,因为他怎么删点都是连通的. 对于一个孤立的点双,至少要设两个关键点. 如果两个点双以一个割点连接,假设断掉这个割点,两个块至少要各设一个关键 ...

  4. BZOJ2730:[HNOI2012]矿场搭建(双连通分量)

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

  5. BZOJ2730——[HNOI2012]矿场搭建

    bzoj2730 & world final 2011 H 1.题目大意:就是有一个无向图,让你在里面选择点,使得,无论哪个点没了以后,其他的点都能到达你选择的任何一个点,输出最少 选择几个点 ...

  6. BZOJ2730 [HNOI2012]矿场搭建 - Tarjan割点

    Solution 输入中没有出现过的矿场点是不用考虑的, 所以不用考虑只有 一个点 的点双联通分量. 要使某个挖矿点倒塌, 相当于割去这个点, 所以我们求一遍割点和点双联通分量. 之后的点双联通分量构 ...

  7. BZOJ2730: [HNOI2012]矿场搭建

    传送门 图的连通性相关的必和割点割边之类的有关. 题目要求对于一个无向图,任意一点被删除后,所有点都和某些指定点是联通的. 这道题比较简单的做法就是求出来所有的块.对于一个块,如果块里有两个及两个以上 ...

  8. [BZOJ2730][HNOI2012]矿场搭建(求割点)

    题目:http://www.lydsy.com:808/JudgeOnline/problem.php?id=2730 分析: 如果坍塌的点不是割点,那没什么影响,主要考虑坍塌的点是割点的情况. 显然 ...

  9. [BZOJ2730]:[HNOI2012]矿场搭建(塔尖)

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

随机推荐

  1. vs工具

    首页 精选版块 论坛帮助 论坛牛人 论坛地图 专家问答 CSDN > CSDN论坛 > .NET技术 > 非技术区 返回列表 管理菜单 结帖 发帖 回复 关注 [推荐] Visual ...

  2. git push 报错 "Peer certificate cannot be authenticated with known CA certificates"

    使用git push -u origin master 命令向远程仓库提交代码时报错:Peer certificate cannot be authenticated with known CA ce ...

  3. GlitchBot -HZNU寒假集训

    One of our delivery robots is malfunctioning! The job of the robot is simple; it should follow a lis ...

  4. linux 系统centOS 7 怎么在线安装mysql

    以下操作,注意空格,为避免出错,可以选择直接copy 第一步: 输入命令行      yum list installed | grep mysql       检查是否已经安装mysql 已安装输入 ...

  5. ES6(阮一峰)学习总结

    1.块级作用域的引入 在ES6之前,js只有全局作用域和函数作用域,ES6中let关键字为其引入了块级作用域. { var a = 5; let b = 6; } console.log(a); co ...

  6. Java对象和Excel转换工具XXL-EXCEL

    <Java对象和Excel转换工具XXL-EXCEL> 一.简介 1.1 概述 XXL-EXCEL 是一个灵活的Java对象和Excel文档相互转换的工具. 一行代码完成Java对象和Ex ...

  7. 关于Spring的HibernateTemplate的findByExample方法使用时的一点注意。

    此前我们已经介绍了HibernateTemplate的使用配置方法,但是对其使用没有仔细说明.因为最近比较忙,我先不去介绍,而是重点说明一下容易引起问题的findByExample方法. 我尝试反编译 ...

  8. php 阿里云短信服务及阿里大鱼实现短信验证码的发送

    一:使用阿里云的短信服务 ① 申请短信签名 ②申请短信模板 ③创建Access Key,获取AccessKeyId 与 AccessKeySecret.(为了安全起见,这里建议使用子用户的Access ...

  9. PAT1126:Eulerian Path

    1126. Eulerian Path (25) 时间限制 300 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN, Yue In grap ...

  10. seo优化做起来不是哪么简单,其实需要的是思维

          SEO百科:随着人们互联网的认识水平的提升,SEO似乎也已经得到了更多的认识.无论是浅显还是深入,SEO一直被大众认为是简单的,甚至是不值得一提的东西,甚至认为SEO无非就是作弊,SEO并 ...