洛谷 P3225 [HNOI2012]矿场搭建

comfyui中的k采样器报错Given groups=1, weight of size [320, 4, 3, 3], expected input[2, 8, 96, 54] to have 4 求助大佬!!!我运行comfyui的时候,k采样器变紫,同时报错显示: 阅读详情

题面

边数N<=500的挖煤点,需要设置尽量少的逃生出口,使得某个煤矿倒塌后,其他挖煤点的工人仍然可以通过某条路径到达逃生出口,并给出逃生出口最少设置数量与方案数
多组数据

分析

倒塌一座后…这一点令人想到割点(割点的倒塌会增加连通块数量,产生隔断),所以本题中显然割点是比较重要的一种分析。

先用tarjan跑出割点,发现把出口安放到割点上不是最优的(割点的倒塌会使连通块增加+出口减少,不利)
所以就要分析除割点外的其他部分,如何安放出口。

不难想到,先把割点删去可以造成一系列无割联通块:

方案①:在每个这样的连通块内安放两个出口。
看似最优,其实有反例

如这种情况,无割图123是删去cut1,cut2得到的连通块,不难想到比方案1中更优的情形:无割图内不放出口,无割图2和3内各一个出口。
如果割点倒塌了一个这样仍能保证逃生
如果一个出口倒塌,其内的人可以通过割点走到另一个出口。
所以方案①不是最优

这样,就发现出口的安排和这种无割图的割点连接数有关。
无割图可以考虑成一种缩点,判断每一个无割图连接的割点数,不难发现:

方案②:
如果这个连通块内本无割点,则只需要安排2个出口,为保证即便一个倒塌,其他也能逃生,Cn2C_{n}^2Cn2​种安排
如果一个无割图连接着一个割点,其内只需安排一个出口,n种安排
无割图连接2个及以上割点,不需安排出口

不难想到,已知割点后再一次dfs,处理出每一个块的size及割点连接数,用组合数学即可计算出种数

代码

#include "cstdlib"
#include <iostream>
#include <stdio.h>
#include <string.h>
#include<algorithm>
#include <string>
#include<vector>
using namespace std;
vector<int> G[510];//i为顶点,G[i]为从其延伸的边集合
int dfs_clock = 0;//时间戳
int pre[510];//每个节点被遍历到时的时间戳
int iscut[510];//记录这个点是不是割点
int low[510];// low[u]表示dfs树中u及其后代经过单线能连回的最早祖先的pre值
int dfs(int u, int fa)//处理u节点的bfs,其父为fa
{
	int lowu = pre[u] = ++dfs_clock;//给u打上编号
	int child = 0;//u的孩子数量
	int v, lowv;//u的某个邻居,这个邻居的low值
	for (int i = 0; i < G[u].size(); i++)
	{
		v = G[u][i];
		if (!pre[v])//v未被访问过,是子节点
		{
			child++;
			lowv = dfs(v, u);
			lowu = min(lowu, lowv);
			if (lowv >= pre[u])iscut[u] = 1;//u的子节点v中没有能连到比u的clock序更前的边,割点
		}
		else if (pre[v] < pre[u] && v != fa)//v已被访问过,且不是u的父亲邻居(u连出的这条边是反向边)
		{
			lowu = min(lowu, pre[v]);
		}
	}
	if (fa == 0 && child == 1)iscut[u] = 0;//根节点且只有一个子,这个根不是割点,2+个子节点则是
	low[u] = lowu;
	return lowu;
}
int id[510];//删去割点后,其余元素属于的连通块编号
int siz[510];//除去割点后,剩余连通块的元素个数
int cutnum[510];//上面这种连通块与多少割点相连
void chunk(int s,int num)//当前节点,当前节点所属连通块
{
	id[s] = num;
	siz[num]++;
	int cur;
	for (int i = 0; i < G[s].size(); i++)
	{
		cur = G[s][i];
		if (id[cur]!=num) {//这一次未被访问过
			if (iscut[cur]) { cutnum[num]++; id[cur] = num; }
			else chunk(cur, num);
		}
	}
}
int max(int &a, int &b, int &c)
{
	if (a > b)
	{
		if (a > c)return a;
		else return c;
	}
	else
	{
		if (b > c)return b;
		else return c;
	}
}
int main()
{
	ios::sync_with_stdio(false);
	int n, m;//点数,边数
	int x, y;
	for (int o = 1;;o++) {
		n = 0;
		cin >> m;
		if (m == 0)break;
		for (int i = 0; i < m; i++)
		{
			cin >> x >> y;
			n = max(x, y, n);
			G[x].push_back(y);
			G[y].push_back(x);
		}
		for (int i = 1; i <= n; i++)
		{
			if (!pre[i])dfs(i, 0);//有多个联通区域
		}
		//iscut[u]==1表示是割点
		int cnt = 0;
		for (int i = 1; i <= n; i++)
		{
			if (iscut[i] == 0 && (!id[i])) { cnt++;chunk(i, cnt); }
		}
		long long ans = 1;
		int c = 0;//安放个数
		for (int i = 1; i <= cnt; i++)
		{
			if (cutnum[i] == 0) { ans *= siz[i] * (siz[i] - 1) / 2; c += 2; }//本身是个无割点连通块
			else if (cutnum[i] == 1) { ans *= siz[i]; c++; }//连接着一个割点的无割图
			else ans *= 1;//连接着>=2个割点的无割图
		}

		cout << "Case " << o << ": " << c << " " << ans<<endl;

		for (int i = 1; i <= n; i++)G[i].clear();
		memset(low, 0, 510 * sizeof(int));
		memset(pre, 0, 510 * sizeof(int));
		memset(iscut, 0, 510 * sizeof(int));
		memset(id, 0, 510 * sizeof(int));
		memset(siz, 0, 510 * sizeof(int));
		memset(cutnum, 0, 510 * sizeof(int));
		dfs_clock = 0;
		//初始化过程
	}
	return 0;
}
SDN — EVPN Overlay 控制面 完成控制面的配置后,当 VxLAN L2 Gateway(e.g. Leaf1)再收到从 Host1 向 Host2 发出的 ARP Request 时,就会先查看自己的 ARP 广播抑制表,发现有 Host2 的 MAC-IP 记录,则直接将 ARP Request 报文中的广播 MAC 地址替换为目的单播 MAC 地址(广播变单播),然后原路 Reply,从而达到 ARP 广播抑制的目的。手动配置的方式虽然简单,但网络中会存在大量的 BUM 洪泛流量,网络扩展性也受到了限制,并不适用于大规模组网场景。 阅读详情

相关推荐

Python结合海康威视工业相机SDK实现高效图像采集与处理

本文详细介绍了如何使用Python结合海康威视工业相机SDK实现高效的图像采集与处理。内容涵盖从环境搭建、SDK核心模块理解,到完整的图像采集流程拆解,包括设备枚举、参数设置、主动取流以及关键的像素格式转换。同时,文章深入探讨了触发模式、参数控制等高级应用,并提供了性能优化建议和可复用的相机操作类封装,帮助开发者快速构建稳定的机器视觉应用。

weixin_29043895的博客 349

信息学奥赛一本通 1521:【 例 2】矿场搭建 | 洛谷 P3225 [HNOI2012] 矿场搭建

对于有两个或两个以上的点双连通分量(就是树中的“分支”顶点),无论哪一个顶点坍塌,该点双连通分量中的顶点都可以通过一条路径走到一个 只有一个割点的点双连通分量(“叶子”顶点)中的出口。对于只有一个割点的点双连通分量(就是树中的“叶子”顶点),该点双连通分量中割点以外的顶点中其中必须设一个出口,否则当割点坍塌时,该点双连通分量中的顶点无法找到一条通往出口的路径。该题问的是:最少选择几个顶点,可以使得在图中删掉任意顶点后,其余顶点都至少有一条已选择顶点的路径,同时求选择顶点的方案数。选择一些顶点作为救援出口。

君义NOIP的博客 1092

告别理论!手把手教你用Patran/Nastran搞定悬臂翼的颤振分析(附完整模型文件)

本文提供了一份详细的Patran/Nastran悬臂翼颤振分析实战指南,涵盖从几何建模到结果解读的全过程。通过手把手教学和完整模型文件,帮助工程师和学生快速掌握气动弹性分析技术,特别适合需要实际操作的初学者。文章重点介绍了模态分析、气动建模和颤振求解等关键步骤,并提供了常见问题排查和优化建议。

weixin_30879169的博客 492

一本通1521:【 例 2】矿场搭建

【代码】一本通1521:【 例 2】矿场搭建。

liu12345635的博客 454

Buck变换器中EA模块的优化设计与稳定性提升策略

本文深入探讨了Buck变换器中误差放大器(EA)模块的核心作用与优化设计。作为系统的“大脑”,EA模块的性能直接决定了电源的稳定性与动态响应。文章详细分析了EA的电路结构、工作原理,并重点阐述了通过优化增益、带宽和相位裕度来提升系统稳定性的策略,同时提供了实用的设计技巧与仿真验证方法。

weixin_29189381的博客 422

简单的图书管理系统---SpringBoot+mysql通过前后端分离实现增删查改

SpringBoot+mysql通过前后端分离实现增删查改 上篇文章介绍了如何写后端接口 SpringBoot连接MySQL获取数据写后端接口 这篇文章,我们就介绍一下怎么写前端 点击修改跳出修改界面,点击添加书籍跳出添加书籍界面 点击删除,直接删除一行数据 其他的也没什么解释了,直接上代码(看不懂的可以私聊我哟) <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>

爱笑的博客 2014

【题解】洛谷P3225 矿场搭建(割点 tarjan)

https://www.luogu.org/blog/cjyyb/solution-p3225 思路还是比较好理解的,不过实现起来挺复杂。。。 虽然数据水 但还是注意初始化别搞错了。。我的Cut数组初始化为0时sizeof写的是cut,看了半天没找出来。。。 #include&lt;cstdio&gt; #include&lt;iostream&gt; #include&lt;algori...

Rem_Inory的博客 375

(实战)[re:Invent 2018]-001:赛道分析-(致敬1024)

打印log

Rainbow 2778

AcWing 396. 矿场搭建 题解(tarjan割点)

懒得写了,直接照搬大佬的题解。

qiaodxs的博客 190

Deep Reinforcement Learning - 1. DDPG原理和算法

Deep Reinforcement Learning - 1. DDPG原理和算法 背景描述 DDPG的定义和应用场景 DDPG算法相关基本概念定义 DDPG实现框架和算法 DDPG对于DPG的关键改进 下一篇 以下用RL作为Reinforcement Learning 的简称。背景描述概括来说,RL要解决的问

kenneth_yu的博客 14万+

基于 Logistic 混沌映射和 Arnold 变换 的变换域水印改进算法【高级网络与信息安全技术-信息隐藏期末课程论文】

摘要:\textbf{摘要:}摘要:本文提出了一种新的水印算法是一种图像认证的新方法。算法首先使用Logistic混沌映射加密水印图像,然后使用Arnold变换置乱水印。同时改变了水印图像的像素位置和像素值,大大提高了算法的安全性。再使用DCT变换嵌入水印,并且结合人类视觉系统的特点来提升水印嵌入的透明性。实验结果表明,本文提出的水印算法可以大幅度提高水印嵌入的透明性与安全性的同时,并不降低算法的鲁棒性。注:完整的代码和论文在文末,百度网盘链接。

zik的博客 891

矿场搭建-

矿场搭建 题目描述 核心思路 题意:给一个不一定连通的无向图,问最少在几个点设置出口,使得任意一个出口坏掉后,其他所有点都可以和某个出口连通。 假设有nnn个点,只有一个出口,那么当这个点坏了之后,其余的n−1n-1n−1个点就没有办法出去了。但是如果至少有两个出口,那么当其中一个出口坏了,仍然可以从另一个出口出去。因此,出口数量必须≥2\geq2≥2 设res表示需要设立的最少的出口,初始化为0,path表示不同最少救援出口的设置方案总数,初始化为1 对于一个连通块来说,设这个连通块中点的数量为nn

qq_45832461的博客 561

在windows安装程序时出现 系统无法打开指定的设备或文件的解决方案

本文主要介绍了在windows安装程序时出现 系统无法打开指定的设备或文件的解决方案,希望能对使用windows的同学们有所帮助。 文章目录 1. 问题描述 2. 解决方案

weixin_43178406的博客 1万+

【题解】洛谷 P3225 【[HNOI2012]矿场搭建】—— TarJan

【题解】洛谷 P3225 【[HNOI2012]矿场搭建】—— TarJan 前置知识: 这是一道好题 ,包含的知识有——(TarJan求割点,TarJan求点双联通分量,组合数学) 如果你不知道怎么用TarJan求割点请戳这里! 如果你不知道什么是点双联通分量请戳这里! 如果你不知道什么是组合数学? %一下PHenning你就会啦!%%%stO PHenning Orz%%% 题目描述 煤矿...

go_bananas的博客 424

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

洛谷P3225 [HNOI2012]矿场搭建

割点

a free man 397

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

洛谷P3225 [HNOI2012]矿场搭建 割点

给出n≤1e3n\leq1e3n≤1e3个点的无向图,你可以在每个点选择放置避难所。然后求问所有的方案满足:1.对于任何一点被破坏,剩下的点能都走到避难所。2.放置避难所的数目最少。 ...

qq_40859782的博客 210

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

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

https://www.luogu.org/problem/show?pid=3225 题目描述 煤矿工地可以看成是由隧道连接挖煤点组成的无向图。为安全起见,希望在工地发生事故时所有挖煤点的工人都能有一条出路逃到救援出口处。于是矿主决定在某些挖煤点设立救援出口,使得无论哪一个挖煤点坍塌之后,其他挖煤点的工人都有一条道路通向救援出口。 请写一个程序,用来计算至少需要设置几个救援出口,...

agcozdwdfvds08078的博客 112

洛谷P3225 HNOI2012 矿场搭建

题目描述 煤矿工地可以看成是由隧道连接挖煤点组成的无向图。为安全起见,希望在工地发生事故时所有挖煤点的工人都能有一条出路逃到救援出口处。于是矿主决定在某些挖煤点设立救援出口,使得无论哪一个挖煤点坍塌之后,其他挖煤点的工人都有一条道路通向救援出口。 请写一个程序,用来计算至少需要设置几个救援出口,以及不同最少救援出口的设置方案总数。 输入输出格式 输入格式: 输入文件有若干组数据,每组数据...

weixin_30672295的博客 70

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

P3225 [HNOI2012]矿场搭建 题目描述 煤矿工地可以看成是由隧道连接挖煤点组成的无向图。为安全起见,希望在工地发生事故时所有挖煤点的工人都能有一条出路逃到救援出口处。于是矿主决定在某些挖煤点设立救援出口,使得无论哪一个挖煤点坍塌之后,其他挖煤点的工人都有一条道路通向救援出口。 请写一个程序,用来计算至少需要设置几个救援出口,以及不同最少救援出口的设置方案总数。 输入输出格式 ...

weixin_34377065的博客 116

洛谷-P3225 [HNOI2012]矿场搭建

(有任何问题欢迎留言或私聊 &amp;&amp; 欢迎交流讨论哦 目录 目录 题意:传送门 思路: AC代码: 原题目描述: 题意:传送门  原题目描述在最下面。  m条无向边链接两个矿洞。在某些矿洞设置安全出口,使得无论哪一个点毁坏,所有的工人都能逃到安全出口。求设置的安全出口的最小数量ans1ans1ans1,以及数量方案ans2ans2a...

打过ICPC/CCPC,学习ACM算法,Linux内核,Openharmony,加油努力开心珍惜 429

洛谷 P3225 [HNOI2012]矿场搭建 tarjan 割点 dfs

题目链接: https://www.luogu.org/problem/P3225 参考博客: https://www.luogu.org/blog/cjyyb/solution-p3225 这道题目的思路完全是根据博主所讲,画图模拟每一种情况最终才理解,写出了自己的代码 思路: 1:tarjan求出割点集合 2:割点把原图分为了若干联通块,(去掉割点和割点相连,拆分后的每一个联通子...

aiwo1376301646的博客 226

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

P3225 [HNOI2012]矿场搭建 题目描述 煤矿工地可以看成是由隧道连接挖煤点组成的无向图。为安全起见,希望在工地发生事故时所有挖煤点的工人都能有一条出路逃到救援出口处。于是矿主决定在某些挖煤点设立救援出口,使得无论哪一个挖煤点坍塌之后,其他挖煤点的工人都有一条道路通向救援出口。 请写一个程序,用来计算至少需要设置几个救援出口,以及不同最少救援出口的设置方案总数。 输入输出格式 输入格式:...

weixin_30664615的博客 119
上一篇: 洛谷P2420 让我们异或吧 (树链剖分法)
下一篇: 洛谷 P2746 [USACO5.3]校园网
engineoid
博客等级 码龄10年 6粉丝 52原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值