【洛谷P3225】[HNOI2012]矿场搭建
矿场搭建
根据题意,发生事故时会有一个挖煤点坍塌,
只有当这个点是割点,会对图的连通性产生影响,
我们首先Tarjan一遍找到所有割点,将原图除去这些割点后,
遍历一遍,找出所有连通块,分三种情况讨论:
1、该连通块连接着两个及以上的割点,这时如果有一个割点被摧毁,
还可以从另一个割点到达其他连通块,不需要建逃生通道
2、该连通块连接着一个割点,若这个割点被摧毁,该连通块的人就无法逃生,
必须建一个出口(从该连通块的所有节点中选一个,ans*=size)
3、该连通块没有割点相连,要建两个出口,如果其中一个被摧毁,还可以从另一个逃出去
ans*=C(size,2);
#include<algorithm>
#include<cstdio>
#define reset(a) std::fill(a,a+1+n,0)
#define min(a,b) ((a)<(b)?(a):(b))
#define max(a,b) ((a)>(b)?(a):(b))
#define N 50020
int n,m,dfn[N],low[N],vis[N],tot,k,T;
const int ch_top=4e7+;
char ch[ch_top],*now_r=ch-,*now_w=ch-;
inline int read(){
while(*++now_r<'');
register int x=*now_r-'';
while(*++now_r>='')x=x*+*now_r-'';
return x;
}
long long ans;
bool gd[N];
int Head[N],to[N<<],next[N<<],num;
void Tarjan(int u){
dfn[u]=low[u]=++tot;
int cnt=;
for(int i=Head[u];i;i=next[i]){
int v=to[i];
if(!dfn[v]){
Tarjan(v); cnt++;
low[u]=min(low[u],low[v]);
if((u==&&cnt>)||(u!=&&low[v]>=dfn[u]))
gd[u]=;
}
else low[u]=min(low[u],dfn[v]);
}
}
int dfs(int t){
int sz=; vis[t]=;
for(int i=Head[t];i;i=next[i])
if(!vis[to[i]]&&!gd[to[i]])
sz+=dfs(to[i]);
else if(vis[to[i]]!=T&&gd[to[i]]){
k++; vis[to[i]]=T;
}
return sz;
}
int main()
{
fread(ch,,ch_top,stdin);
int now=;
m=read();
while(m){
if(!m) break;
reset(Head); reset(gd);
reset(vis); reset(dfn);
num=tot=n=T=;
int x,y;
for(int i=;i<=m;i++){
x=read(); y=read();
to[++num]=y;
next[num]=Head[x];
Head[x]=num;
to[++num]=x;
next[num]=Head[y];
Head[y]=num;
n=max(n,max(x,y));
}
int cnt=;
Tarjan();ans=;
for(int i=;i<=n;i++)
if(!gd[i]&&!vis[i]){
k=; T++;
int size=dfs(i);
if(k==) ans*=(long long)size*(size-)/,cnt+=;
else if(k==) ans*=size,cnt++;
}
printf("Case %d: %d %lld\n",++now,cnt,ans);
m=read();
}
return ;
}
双倍经验:UVA1108
【洛谷P3225】[HNOI2012]矿场搭建的更多相关文章
- 洛谷 P3225 [HNOI2012]矿场搭建 解题报告
P3225 [HNOI2012]矿场搭建 题目描述 煤矿工地可以看成是由隧道连接挖煤点组成的无向图.为安全起见,希望在工地发生事故时所有挖煤点的工人都能有一条出路逃到救援出口处.于是矿主决定在某些挖煤 ...
- 洛谷——P3225 [HNOI2012]矿场搭建
P3225 [HNOI2012]矿场搭建 题目描述 煤矿工地可以看成是由隧道连接挖煤点组成的无向图.为安全起见,希望在工地发生事故时所有挖煤点的工人都能有一条出路逃到救援出口处.于是矿主决定在某些挖煤 ...
- 洛谷P3225 HNOI2012 矿场搭建
题目描述 煤矿工地可以看成是由隧道连接挖煤点组成的无向图.为安全起见,希望在工地发生事故时所有挖煤点的工人都能有一条出路逃到救援出口处.于是矿主决定在某些挖煤点设立救援出口,使得无论哪一个挖煤点坍塌之 ...
- 洛谷 P3225 [HNOI2012]矿场搭建
传送门 题目大意:建设几个出口,使得图上无论哪个点被破坏,都可以与出口联通. 题解:tarjian求割点 首先出口不能建在割点上,找出割点,图就被分成了几个联通块. 每个联通块,建出口.如果割点数为0 ...
- 洛谷—— P3225 [HNOI2012]矿场搭建
https://www.luogu.org/problem/show?pid=3225 题目描述 煤矿工地可以看成是由隧道连接挖煤点组成的无向图.为安全起见,希望在工地发生事故时所有挖煤点的工人都能有 ...
- BZOJ2730或洛谷3225 [HNOI2012]矿场搭建
BZOJ原题链接 洛谷原题链接 显然在一个点双连通分量里,无论是哪一个挖煤点倒塌,其余挖煤点就可以互相到达,而对于一个点双连通分量来说,与外界的联系全看割点,所以我们先用\(tarjan\)求出点双连 ...
- P3225 [HNOI2012]矿场搭建 割点 tarjan 双联通分量
https://www.luogu.org/problemnew/show/P3225 题意 煤矿工地可以看成是由隧道连接挖煤点组成的无向图.为安全起见,希望在工地发生事故时所有挖煤点的工人都能有一条 ...
- P3225 [HNOI2012]矿场搭建 题解
这道题挺难的,可以加深对割点的理解,还有,排列组合好重要了,分连通块,然后乘法原理(加法原理计数什么的) 传送门 https://www.luogu.org/problem/P3225 省选oi题 ...
- P3225 [HNOI2012]矿场搭建
传送门 对于一个点双联通分量,如果它连接了两个或更多割点 那么不论哪个点GG都有至少一条路通到其他的点双联通分量,所以我们不用考虑 如果它只连接一个割点,如果这个割点GG,那整个块也一起GG,所以要再 ...
- [Luogu] P3225 [HNOI2012]矿场搭建
题目描述 煤矿工地可以看成是由隧道连接挖煤点组成的无向图.为安全起见,希望在工地发生事故时所有挖煤点的工人都能有一条出路逃到救援出口处.于是矿主决定在某些挖煤点设立救援出口,使得无论哪一个挖煤点坍塌之 ...
随机推荐
- Android IntentFilter 匹配原则浅析
1 Intent分为两大类,显式和隐式. 显式事件,就是指通过 component Name 属性,明确指定了目标组件的事件. 比如我们新建一个Intent,指名道姓的说,此事件用于启动名为" ...
- VMware装Linux系统全屏问题
在VMware上出装Linux,有强迫症的患者总是无法接受它不能全屏的问题,当然网上也有该问题的解决方案,但是搜索出来的答案总是零零散散,让很多初学者望而却步!今天笔者根据自己的机遇总结一遍最完备的解 ...
- mac解决系统设置安全与隐私没有允许所有来源
解决系统设置安全与隐私没有允许所有来源:sudo spctl --master-disable
- python学习(六)--正则的一些例子
import re #正则表达式#compile函数,--将正则表达式转变为内部函数,提高执行效率strr = "python123456"pattern = "Pyth ...
- springboot如何实现微信登录,前期准备
现在网站用微信登录真的是很多,那么具体是怎么实现的呢? 首先介绍的是微信开放平台,我们如果需要微信登录或者支付都需要在上面注册一个账号,用这个账号去为我们的网站申请的话,需要用到企业资料(家里有营业执 ...
- 数组和矩阵(1)——Find the Duplicate Number
Given an array nums containing n + 1 integers where each integer is between 1 and n (inclusive), pro ...
- PAT 1059. Prime Factors
反正知道了就是知道,不知道也想不到,很快 #include <cstdio> #include <cstdlib> #include <vector> using ...
- Csharp and Vbscript: Encryption/Decryption Functional
1 /// <summary> 2 /// 塗聚文 3 /// 20130621 4 /// 自定义字符串加密解密 5 /// < ...
- BAT的java面试题
公司:国内三巨头其中的一家!面试时间约在1月份左右!基本上都是在晚上,所以不影响白天上班! 一面 一面偏架构方面 1.介绍一下自己,讲讲项目经历 2.你们项目中微服务是怎么划分的,划分粒度怎么确定? ...
- MySQL远程连接:Host 'x' is not allowed to connect to this MySQL server
远程连接MySQL时发现如下错误: java.sql.SQLException: null, message from server: "Host '192.168.30.23' is no ...