# CF949C_Data Center Maintenance

题意:

某土豪公司建立了n个数据中心,把m份资料每份在其中的两个数据中心备份。 每个数据中心在一天h个小时当中有一个小时需要维护,此时不提供资料下载服务。 现在土豪公司想要将其中若干个数据中心的维护时间向后推迟一小时,并要求一天中任意时刻每份资料都可以被下载,问最少选取多少个数据中心维护。


解:

简化题意:

现有 n 个点,点 i 的权值为 a[i],

现有 m 对描述两个点之间的关系,每对关系形如 a[x]!=a[y]

你现在可以对其中若干点进行一次操作,操作可以使其权值 +1

问:最少操作多少次,可以使得这 m 对关系都成立

注意!你不可以不操作,即使关系已经都成立,你也需要至少操作某一个点


题目要求,无论如何,至少操作一个点

所以,我们发现,题目的含义就是要求更改若干点,然后连锁反应的修改其他点

所以,我们来思考点和点之间的修改关系

容易想到,若 a[x]+1==a[y],则确定要修改 x,就必须要修改 y,且这是一个单向关系

上式毕竟不严谨,因为 h+1 会被认为等于1,所以,严谨的条件是:若 (a[x]+1)%h==a[y],x 与 y 之间存在修改的单向边关系

按照这个规则,我们构建出基于修改依赖关系的一个有向图

考虑这个有向图中的一个scc

若修改scc中的任意一点,也就必须至少把整个scc中其他点也修改,所以修改同一scc中任意一个点都是完全等价的

所以,tarjan,缩点,只保留每个scc的size信息

这样,修改scc[i]中任意一点,也必须至少修改size[i]那么多的点

为什么要加“至少”?因为一个scc可以有某条出边指向另一个scc,这样,对于起点的scc,修改其中一个点,终点处的scc也必须整个都修改

所以,各个scc之间还会有一系列的连锁反应

整个连锁反应一定在某个或某些出度为0的scc处停止,代价就是整个连锁过程中包含的scc的size和

既然如此,我们何不只修改那些出度为0的scc?这样的代价一定尽可能小

至此,问题解决了


重理思路:

1、由点和点修改的关系构建无向图

2、tarjan求scc,缩点,大点中留下size信息

3、找出度为0的那些大点,比较,最小的那个size值就是答案


__EOF__

本文作者熹圜
本文链接https://www.cnblogs.com/Xiwon/p/13572621.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   熹圜  阅读(115)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
点击右上角即可分享
微信分享提示