【双连通分量】Bzoj2730 HNOI2012 矿场搭建
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 矿场搭建的更多相关文章
- [BZOJ2730][HNOI2012]矿场搭建 点双 割点
2730: [HNOI2012]矿场搭建 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 2852 Solved: 1344[Submit][Stat ...
- bzoj2730 [HNOI2012]矿场搭建 (UVAlive5135 Mining Your Own Business)
2730: [HNOI2012]矿场搭建 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 1147 Solved: 528[Submit][Statu ...
- BZOJ2730 [HNOI2012]矿场搭建[点双连通分量]
看到删去一个点,需要剩下的都和关键点连通,有端联想到找点双,因为他怎么删点都是连通的. 对于一个孤立的点双,至少要设两个关键点. 如果两个点双以一个割点连接,假设断掉这个割点,两个块至少要各设一个关键 ...
- BZOJ2730:[HNOI2012]矿场搭建(双连通分量)
Description 煤矿工地可以看成是由隧道连接挖煤点组成的无向图.为安全起见,希望在工地发生事故时所有挖煤点的工人都能有一条出路逃到救援出口处.于是矿主决定在某些挖煤点设立救援出口,使得无论哪一 ...
- BZOJ2730——[HNOI2012]矿场搭建
bzoj2730 & world final 2011 H 1.题目大意:就是有一个无向图,让你在里面选择点,使得,无论哪个点没了以后,其他的点都能到达你选择的任何一个点,输出最少 选择几个点 ...
- BZOJ2730 [HNOI2012]矿场搭建 - Tarjan割点
Solution 输入中没有出现过的矿场点是不用考虑的, 所以不用考虑只有 一个点 的点双联通分量. 要使某个挖矿点倒塌, 相当于割去这个点, 所以我们求一遍割点和点双联通分量. 之后的点双联通分量构 ...
- BZOJ2730: [HNOI2012]矿场搭建
传送门 图的连通性相关的必和割点割边之类的有关. 题目要求对于一个无向图,任意一点被删除后,所有点都和某些指定点是联通的. 这道题比较简单的做法就是求出来所有的块.对于一个块,如果块里有两个及两个以上 ...
- [BZOJ2730][HNOI2012]矿场搭建(求割点)
题目:http://www.lydsy.com:808/JudgeOnline/problem.php?id=2730 分析: 如果坍塌的点不是割点,那没什么影响,主要考虑坍塌的点是割点的情况. 显然 ...
- [BZOJ2730]:[HNOI2012]矿场搭建(塔尖)
题目传送门 题目描述 煤矿工地可以看成是由隧道连接挖煤点组成的无向图.为安全起见,希望在工地发生事故时所有挖煤点的工人都能有一条出路逃到救援出口处.于是矿主决定在某些挖煤点设立救援出口,使得无论哪一个 ...
随机推荐
- IOS Dev 需要常看的网站<转>
英文系列 网站 http://Raywenderlich.com 这个不多说了吧,iOS界的百科全书.iOS By tutorial系列书从iOS7到8全买的正版别说499刀了,999刀也入手. ob ...
- form表单提交转为可被 getModel(PROJECT.class ,null);接收
var form = new mini.Form("#editForm"+id); form.validate();if (!form.isValid()) { alert('信息 ...
- 排序算法入门之堆排序(Java实现)
堆排序 在学习了二叉堆(优先队列)以后,我们来看看堆排序.堆排序总的运行时间为O(NlonN). 堆的概念 堆是以数组作为存储结构. 可以看出,它们满足以下规律: 设当前元素在数组中以R[i]表示,那 ...
- palindrome number(回文数)
Determine whether an integer is a palindrome. Do this without extra space. Some hints: Could negativ ...
- javascript学习(三)——常用方法(2)
一.兼容性较高的浏览器页面关闭 //关闭网页,不支持火狐(火狐返回上次浏览页面) //FireFox非window.open()等弹出页面,需要在地址栏中输入about:config, 然后将do ...
- Jedis连接池对Redis数据操作
[效果图] [前言] Redis是常用于缓存的非关系型数据库,感觉更像加强型的HashMap的用法,依靠Key和Value保存数据.官方推荐用Jedis来操作Redis数据库,使用和JDBC差不多,一 ...
- BeautifulSoup详解
BeautifulSoup BeautifulSoup是一个模块,该模块用于接收一个HTML或XML字符串,然后将其进行格式化,之后遍可以使用他提供的方法进行快速查找指定元素,从而使得在HTML或XM ...
- Spring Boot开发MongoDB应用实践
本文继续上一篇定时任务中提到的邮件服务,简单讲解Spring Boot中如何使用MongoDB进行应用开发. 上文中提到的这个简易邮件系统大致设计思路如下: 1.发送邮件支持同步和异步发送两种 2.邮 ...
- spring boot:thymeleaf使用详解
简单说, Thymeleaf 是一个跟 Velocity.FreeMarker 类似的模板引擎,它可以完全替代 JSP .相较与其他的模板引擎,它有如下三个极吸引人的特点: 1.Thymeleaf 在 ...
- 从 <sofa:XXX> 标签开始看 SOFA-Boot 如何融入 Spring
前言 SOFA-Boot 现阶段支持 XML 的方式在 Spring 中定义 Bean,通过这些标签,我们就能从 Spring 容器中取出 RPC 中的引用,并进行调用,那么他是如何处理这些自定义标签 ...