【双连通分量】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]矿场搭建(塔尖)
题目传送门 题目描述 煤矿工地可以看成是由隧道连接挖煤点组成的无向图.为安全起见,希望在工地发生事故时所有挖煤点的工人都能有一条出路逃到救援出口处.于是矿主决定在某些挖煤点设立救援出口,使得无论哪一个 ...
随机推荐
- html5中新增的属性和删除的属性
一.表单新增的属性 1.对input(type="text").select.textarea与button元素指定autofocus属性,它以指定属性的方式让元素在画面打开时自动 ...
- mysql性能优化之-innodb_flush_log_at_trx_commit
innodb_flush_log_at_trx_commit是配置MySql日志何时写入硬盘的参数: 一.参数值说明 0:log buffer将每秒一次地写入log file中,并且log file的 ...
- word break II(单词切分)
Given a non-empty string s and a dictionary wordDict containing a list of non-empty words, add space ...
- Tomcat的缺省是多少,怎么修改
Tomcat的缺省端口号是8080. 修改Tomcat端口号: 1.找到Tomcat目录下的conf文件夹 2.进入conf文件夹里面找到server.xml文件 3.打开server.xml文件 ...
- Webapck项目开发基本构建及配置
1.创建项目文件夹 myapp 手动创建myapp,或mkdir myapp 2.cd myapp 3.npm init (初始化项目) 4.一路回车(关于项目信息的填写,可以不写,一路回车即可) 可 ...
- python编码详解--转自(Alex的博客)
原文地址:http://www.cnblogs.com/alex3714/articles/7550940.html 编码回顾 在备编码相关的课件时,在知乎上看到一段关于Python编码的回答 这哥们 ...
- strtok函数读写冲突问题
先上测试代码 #include "stdafx.h" #include <iostream> using namespace std; int _tmain(int a ...
- 畅通工程-HZNU寒假集训
畅通工程 某省调查城镇交通状况,得到现有城镇道路统计表,表中列出了每条道路直接连通的城镇.省政府"畅通工程"的目标是使全省任何两个城镇间都可以实现交通(但不一定有直接的道路相连,只 ...
- 大数据与Mapreduce
第十五章 大数据与Maprudece 一.引言 实际生活中的数据量是非常庞大的,采用单机运行的方式可能需要若干天才能出结果,这显然不符合我们的预期,为了尽快的获得结果,我们将采用分布式的方式,将计算分 ...
- 关于cannot find module 'xxxx’的一个可能解决方法。
关于cannot find module 'xxxx'的一个可能解决方法. 由于学习angular2,想单独学习一下typescript下angular2使用的'rxjs'是怎么使用的,我用npm自己 ...