描述
有n个数据中心, m个客户, 一天有h小时, 每个数据中心在每天的一个特定小时宕机, 每个用户的数据保存在两个数据中心上, 数据保证每个用户在每个小时都可以访问到数据, 也就是不存在一个用户保存数据的两个中心宕机时间相同. 现要选出一部分中心将他们的宕机时间向后推迟1h, 且还要保证用户对数据的随时访问, 问最少要选几个机器(不能选0个).
思路
对于同一个客户的两台机器, 如果宕机时间(其实原文是维护时间…)间隔是1, 那么前一个机器推迟, 后一个必然也要推迟.(另外考虑24h-1h)这种情况, 需要取模.
对于机器A推迟, 机器B也要推迟
的情况, 我们在A->B之间建边. 这样形成一张有向图, 原题转化成了求最小强连通分量(每一个连通块推迟了一个点,则整个块都需要被推迟).
另外对于size为1
的情况, 特判一下出度是否为0
.
关于kosaraju
算法求强连通分量: https://oi-wiki.org/graph/scc/#kosaraju
代码
1 | # 949C |