poj 2186 Popular Cows (強連通分量,縮點)

一直不明所謂縮點爲何意,弄完這題算是明白了。

 

其實很簡單,我們求強連通分量時,給每個頂點做一個標記,標記該頂點屬於哪個強聯通分量,然後屬於同一個強連通分量的點就可以看作同一個點了。這就是所謂的“縮點”

 

此題用了個定理 :有向無環圖(DAG)中,從任意一個點出發,必定可以到達某一個出度爲0的點。

 

這個不用證明,直觀想一下就行了。  因爲無環,所以從一個點出發,必定會到達終點,終點的出度即是0

求強連通的目的也就是將原圖改造成一個DAG,因爲將屬於同一強連通分支的看作一點後,這個新圖就是一個DAG

 

我們統計DAG中出度爲0的個數,如果大於1,說明出度爲0的“點”不止一個,也就沒有題目中要求的能夠被其他所有點到達的點。

 

如果出度爲0的“點”(強連通分支),只有一個,那麼該強連通分支中所有的點即可被剩下的點到達。該分支點的個數即是答案。

 

求強聯通用的tarjan算法,獻上代碼:

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章