首页 > 代码库 > Usaco5.3.3 Network of Schools
Usaco5.3.3 Network of Schools
题目描述
一些学校连入一个电脑网络。那些学校已订立了协议:每个学校都会给其它的一些学校分发软件(称作“接受学校”)。注意即使 B 在 A 学校的分发列表中, A 也不一定在 B 学校的列表中。
你要写一个程序计算,根据协议,为了让网络中所有的学校都用上新软件,必须接受新软件副本的最少学校数目(子任务 A)。更进一步,我们想要确定通过给任意一个学校发送新软件,这个软件就会分发到网络中的所有学校。为了完成这个任务,我们可能必须扩展接收学校列表,使其加入新成员。计算最少需要增加几个扩展,使得不论我们给哪个学校发送新软件,它都会到达其余所有的学校(子任务 B)。一个扩展就是在一个学校的接收学校列表中引入一个新成员。
怎么办呢?我们把这个问题等价一下,相当于求最少从哪几个节点出发,可以遍历整幅图。
我们先来考虑入度:入度为零的节点必须遍历,所以入度为零的节点都被包括在搜索点的集合中。
但是仅仅搜入度为零的节点还不够,因为有可能在图的最边缘的节点组成了一个环,所以我们也应该在最边缘的环中任意选一个节点作为出发点。
可是如果有多个环重叠在一起呢?所以只找环是错误的。
因为有环使问题变得很复杂,我们来考虑无环的请况:结果就是图中入度为零的节点个数。那我们是不是可以把一个有环图缩成一个无环图呢?在遍历问题中这是等价的。
多个环套在一起的请况怎么办?这让我们想到了强连通分量。在经过强联通分量处理后,所有环都变成了等价的点,这样就可以解决子问题A。
同样的,对于子问题B,一个DAG(有向无环图)只要连接后使得入度出度都不等于零,它就一定是强联通分量。
Usaco5.3.3 Network of Schools
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。