【洛谷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]矿场搭建
题目描述 煤矿工地可以看成是由隧道连接挖煤点组成的无向图.为安全起见,希望在工地发生事故时所有挖煤点的工人都能有一条出路逃到救援出口处.于是矿主决定在某些挖煤点设立救援出口,使得无论哪一个挖煤点坍塌之 ...
随机推荐
- (转) 来自: http://man.linuxde.net/tee
tee命令文件过滤分割与合并 tee命令用于将数据重定向到文件,另一方面还可以提供一份重定向数据的副本作为后续命令的stdin.简单的说就是把数据重定向到给定文件和屏幕上. 存在缓存机制,每1024个 ...
- svn checkout时连接不到服务器,重装也没有弹出用户名和密码输入框的问题
用公司的电脑,是win7 64位的系统,可以checkout出东西.现在用自己的电脑上,系统是win7 64位的,却再也连不上SVN. 1.不提示输入用户名和密码,不管重装多少次都一样. 2.Tort ...
- zookeeper JAVA API 简单操作
package org.admln.program.Zoo_Test; import java.io.IOException; import java.security.NoSuchAlgorithm ...
- c#输入方法名来调用方法(反射)
using System; using System.Collections.Generic; using System.Linq; using System.Reflection; using Sy ...
- Jenkins+Postman+Newma+Xmysql之API全自动化测试
第一章 前期准备:各种安装配置介绍 ①Postman安装及使用 ②Newman 安装及使用 ③Xmysql 安装及使用 ④Jenkins安装及配置 1.postman 安装及使用 1.1.postma ...
- roboframework-ride运行案例时报 Error 267 错误问题
偶然间碰到这个问题,检查下路径是否有中文,如有中文换成英文试试. (ps:通常自己创建的中文路径也是可以的,我的案例是从Linux环境中创建拷贝过来的,可能导致案例路径编码问题)
- CVE-2018-7600-Drupal远程代码执行漏洞-Render API
今天学习一下Drupal的另一个漏洞,由于渲染数组不当造成的漏洞 poc: url:http://localhost/drupal-8.5.0/user/register?element_parent ...
- 吴恩达《Machine Learning Yearning》总结(11-20章)
11.何时修改开发集.测试集和度量指标 开展一个新项目,尽快选好开发集和测试集:例子,根据度量指标A分类器排在B分类器前面,但是团队认为B分类器在实际产品上优于A分类器,这时就需要考虑修改开发集和测试 ...
- Js COOkie 读取
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/stri ...
- [转]谷歌Chrome浏览器开发者工具教程—JS调试篇
来源:http://blog.csdn.net/cyyax/article/details/51242720 上一篇我们学习了谷歌Chrome浏览器开发者工具的基础功能,下面介绍的是Chrome开发工 ...