1. 程式人生 > >Usaco5.3.3 Network of Schools

Usaco5.3.3 Network of Schools

就會 net 其余 接收 強連通分量 遍歷 組成 多個 需要

題目描述

一些學校連入一個電腦網絡。那些學校已訂立了協議:每個學校都會給其它的一些學校分發軟件(稱作“接受學校”)。註意即使 B 在 A 學校的分發列表中, A 也不一定在 B 學校的列表中。

你要寫一個程序計算,根據協議,為了讓網絡中所有的學校都用上新軟件,必須接受新軟件副本的最少學校數目(子任務 A)。更進一步,我們想要確定通過給任意一個學校發送新軟件,這個軟件就會分發到網絡中的所有學校。為了完成這個任務,我們可能必須擴展接收學校列表,使其加入新成員。計算最少需要增加幾個擴展,使得不論我們給哪個學校發送新軟件,它都會到達其余所有的學校(子任務 B)。一個擴展就是在一個學校的接收學校列表中引入一個新成員。

怎麽辦呢?我們把這個問題等價一下,相當於求最少從哪幾個節點出發,可以遍歷整幅圖。

我們先來考慮入度:入度為零的節點必須遍歷,所以入度為零的節點都被包括在搜索點的集合中。

但是僅僅搜入度為零的節點還不夠,因為有可能在圖的最邊緣的節點組成了一個環,所以我們也應該在最邊緣的環中任意選一個節點作為出發點。

可是如果有多個環重疊在一起呢?所以只找環是錯誤的。

因為有環使問題變得很復雜,我們來考慮無環的請況:結果就是圖中入度為零的節點個數。那我們是不是可以把一個有環圖縮成一個無環圖呢?在遍歷問題中這是等價的。

多個環套在一起的請況怎麽辦?這讓我們想到了強連通分量。在經過強聯通分量處理後,所有環都變成了等價的點,這樣就可以解決子問題A。

同樣的,對於子問題B,一個DAG(有向無環圖)只要連接後使得入度出度都不等於零,它就一定是強聯通分量。

Usaco5.3.3 Network of Schools