P3225 [HNOI2012] 矿场搭建

挖煤点坍塌相当于把该点和与其相连的边在图上删掉。

借用wjyyy的题解,我们定义“叶子连通块”为“只包含\(1\)个割点的点双连通分量”,“非叶子连通块”为“包含\(\ge 2\)个割点的点双连通分量”。

如下图,橙色点是割点,红色框圈出的是点双,加粗的是叶子连通块。

叶子连通块只有\(1\)个割点,所以必须保证该连通块内部存在逃生出口,否则割点塌陷,里面的人就逃不出去了。显然逃生出口只要设置在此连通块的非割点处即可。

由于非叶子连通块有\(\ge 2\)个割点,所以就算其中一个割点塌陷,该连通块的人仍然可以通过其他未塌陷的割点跑到叶子连通块或者其他连通块去。既然任何一个直接可达的叶子连通块都已经存在逃生出口了,那就不必额外耗费资源去建逃生出口了。

所以这道题第\(1\)问的答案是叶子连通块的个数,第\(2\)问的答案是(每个叶子连通块的大小\(-1\))的乘积。

注意特判不存在叶子连通块(也就是整张图不存在割点)的情况,此时需要建\(2\)个逃生出口,以防其中一个塌陷。答案是\(C_n^2=\frac{n(n-1)}{2}\)。

时间复杂度:每组数据\(O(n)\)。

点击查看代码
#include<bits/stdc++.h>
#define int long long
#define N 1010
using namespace std;
int n,m,dfn[N],low[N],tim,cnt1,cnt2;
stack<int> p;
bitset<N> is,vis;
vector<int> G[N];
void tarjan(int u){
dfn[u]=low[u]=++tim;
int ch=0;
for(int i:G[u]){
if(!dfn[i]){
tarjan(i),ch++;
low[u]=min(low[u],low[i]);
if(u!=1&&low[i]>=dfn[u]) is[u]=1;
}else low[u]=min(low[u],dfn[i]);
}
if(u==1&&ch>=2) is[u]=1;
}
void dfs(int u){
if(vis[u]) return;
vis[u]=1,cnt2++;
if(is[u]){
p.push(u),cnt1++;
return;
}
for(int i:G[u]) dfs(i);
}
void solve(int num){
tarjan(1);
int ans1,ans2;
if(is.none()){
ans1=2,ans2=n*(n-1)/2;
}else{
ans1=0,ans2=1;
for(int i=1;i<=n;i++){
if(is[i]) continue;
cnt1=cnt2=0,dfs(i);
while(!p.empty()) vis[p.top()]=0,p.pop();
if(cnt1==1) ans1++,ans2*=(cnt2-1);
}
}
cout<<"Case "<<num<<": "<<ans1<<" "<<ans2<<"\n";
}
signed main(){
for(int koishi=1;;koishi++){
memset(dfn,0,sizeof dfn);
memset(low,0,sizeof low);
vis=is=tim=n=0;
cin>>m;
if(!m) break;
for(int i=1,u,v;i<=m;i++){
cin>>u>>v;
G[u].emplace_back(v);
G[v].emplace_back(u);
n=max(n,max(u,v));
}
solve(koishi);
for(int i=1;i<=n;i++) G[i].clear();
}
return 0;
}

[题解]P3225 [HNOI2012] 矿场搭建的更多相关文章

  1. 洛谷 P3225 [HNOI2012]矿场搭建 解题报告

    P3225 [HNOI2012]矿场搭建 题目描述 煤矿工地可以看成是由隧道连接挖煤点组成的无向图.为安全起见,希望在工地发生事故时所有挖煤点的工人都能有一条出路逃到救援出口处.于是矿主决定在某些挖煤 ...

  2. 洛谷——P3225 [HNOI2012]矿场搭建

    P3225 [HNOI2012]矿场搭建 题目描述 煤矿工地可以看成是由隧道连接挖煤点组成的无向图.为安全起见,希望在工地发生事故时所有挖煤点的工人都能有一条出路逃到救援出口处.于是矿主决定在某些挖煤 ...

  3. P3225 [HNOI2012]矿场搭建 题解

    这道题挺难的,可以加深对割点的理解,还有,排列组合好重要了,分连通块,然后乘法原理(加法原理计数什么的) 传送门   https://www.luogu.org/problem/P3225 省选oi题 ...

  4. 洛谷P3225 HNOI2012 矿场搭建

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

  5. 洛谷 P3225 [HNOI2012]矿场搭建

    传送门 题目大意:建设几个出口,使得图上无论哪个点被破坏,都可以与出口联通. 题解:tarjian求割点 首先出口不能建在割点上,找出割点,图就被分成了几个联通块. 每个联通块,建出口.如果割点数为0 ...

  6. P3225 [HNOI2012]矿场搭建 割点 tarjan 双联通分量

    https://www.luogu.org/problemnew/show/P3225 题意 煤矿工地可以看成是由隧道连接挖煤点组成的无向图.为安全起见,希望在工地发生事故时所有挖煤点的工人都能有一条 ...

  7. P3225 [HNOI2012]矿场搭建

    传送门 对于一个点双联通分量,如果它连接了两个或更多割点 那么不论哪个点GG都有至少一条路通到其他的点双联通分量,所以我们不用考虑 如果它只连接一个割点,如果这个割点GG,那整个块也一起GG,所以要再 ...

  8. [Luogu] P3225 [HNOI2012]矿场搭建

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

  9. P3225 [HNOI2012]矿场搭建 tarjan割点

    这个题需要发现一点规律,就是先按割点求块,然后求每个联通块中有几个割点,假如没有割点,则需要建两个出口,如果一个割点,则需要建一个出口,2个以上不用建. 题干: 题目描述 煤矿工地可以看成是由隧道连接 ...

  10. 洛谷—— P3225 [HNOI2012]矿场搭建

    https://www.luogu.org/problem/show?pid=3225 题目描述 煤矿工地可以看成是由隧道连接挖煤点组成的无向图.为安全起见,希望在工地发生事故时所有挖煤点的工人都能有 ...

随机推荐

  1. 创建Spring Boot项目时,提示 Cannot download 'https://start.spring.io'

    问题提出 在使用IDEA创建Spring Boot项目时,提示无法连接https://start.spring.io,内容如下: Cannot download 'https://start.spri ...

  2. 玩客云 OEC/OECT 笔记(2) 运行RKNN程序

    目录 玩客云 OEC/OECT 笔记(1) 拆机刷入Armbian固件 玩客云 OEC/OECT 笔记(2) 运行RKNN程序 RKNN OEC/OEC-Turbo 使用的芯片是 RK3566/RK3 ...

  3. 【中英】【吴恩达课后测验】Course 5 -序列模型 - 第二周测验 - 自然语言处理与词嵌入

    [中英][吴恩达课后测验]Course 5 -序列模型 - 第二周测验 - 自然语言处理与词嵌入 上一篇:[课程5 - 第一周编程作业]※※※※※ [回到目录]※※※※※下一篇:[课程5 -第二周编程 ...

  4. PI发布rest,json接口

    PI接口的开发分成两个部分,第一个部分是ESB(Enterprise Services Builder)部分,这里注意做数据结构定义,接口导入,字段关系映射,定义接口等. 第二部分是IB(Integr ...

  5. 3-Transforms使用

    1. Transforms用途 ① Transforms当成工具箱的话,里面的class就是不同的工具.例如像totensor.resize这些工具. ② Transforms拿一些特定格式的图片,经 ...

  6. 破解五大运营痛点:盘古信息IMS MOM重塑PCB工厂数字化基石

    随着5G.物联网等技术发展,PCB行业下游消费电子.汽车电子等领域需求呈现小批量多品种.高精度高可靠性.快速交付特点.传统"规模驱动"生产模式难以适应新需求,行业竞争焦点转向质量. ...

  7. Kong入门学习实践(8)流量控制插件

    Kong的一大特色就在于强大的可扩展性,具体实现方式就是插件.一来Kong已经提供了很多内置的插件,二来我们也可以使用Lua语言自定义开发插件.今天,我们就来了解一些常用的流量控制插件. 关于流量控制 ...

  8. 《容器化.NET应用架构指南》脑图学习笔记(一)

    一.关于这本官方"圣经" 作为.NET程序员,对于微软官方推动的架构示例总是特别关注,从PetShop到MusicStore再到eShopOnContainers,每一次关注,都会 ...

  9. 计蒜客 A2285 / 2019ICPC徐州 H - Yuuki and a problem

    右转学倍增值域分块 直接在神秘数的做法上大力树套树是 naive 的,考虑将值域分块的做法代入优化. 对于一个块 \([2^{k}, 2^{k+1})\) 内最小的数 \(m\),如果当前可以表示出的 ...

  10. 简单的sqlHelper类

    public class SQLHelper     {        //连接数据库        static string connStr = ConfigurationManager.Conn ...