bzoj2815 災難 拓撲排序 lca

2021-07-10 03:57:37 字數 609 閱讀 3058

按照出題人的題解

,我們需要構造一顆「滅絕樹」。即對於滅絕樹上的兩個點x,y,如果x為y的祖先,則x的滅亡會直接導致y的滅亡。下面進行構造:

首先進行拓撲排序,然後按照排序的逆序構造,保證對於圖中的任意x->,都能使x構造前,已經完成構造。然後找到在滅絕樹上面的位置,顯然在滅絕樹上的公共祖先的滅絕會導致全部滅絕進而導致x滅絕。於是可以求它們的lca,那麼lca就是x在滅絕樹上面的祖先。最後跑一邊dfs統計子樹大小即可。

實際上,這是求有向圖必經點的乙個特殊問題(無環),實際上可以直接用支配樹解決(然而窩太弱不會)。也是o(n)級別的。

ac**如下:

#include#include#include#define n 100005

using namespace std;

int n,m,tot,sz[n],h[n],bin[20],pnt[n<<4],nxt[n<<4],d[n],fa[n][17],etr[n];

int read()

return x;

}int lca(int x,int y){

if (x<0) return y;

if (d[x]

by lych

2016.2.26

BZOJ2815 拓撲排序 LCA

作為乙個dag圖,結點之間又有這麼明顯的等級之分,很容易想到的是拓撲排序。但是不管是正向的拓撲排序還是逆向的拓撲排序感覺都不是特別容易的能解決這個問題。但事實上只要知道乙個十分關鍵的點 乙個物種會滅絕的必要條件是當且僅當另乙個物種滅絕。例如樣例給的當中,小強的滅絕僅和草是否滅絕有關,和牛羊無關。因此...

bzoj2815 ZJOI2012 災難 支配樹

沒事學習一下新演算法 反正也不是很難,wc講過的拖到現在真是不好意思啊。個人感覺基本上恨少考這個東西 題意 給你乙個dag,對於每乙個點去掉以後有多少個點不能從入度為0的點到達。那麼這明顯就是支配樹,只要我刪的這個點是必經點,那麼我在支配樹上的所有兒子都不能到達,那麼每個點的答案就是他在支配樹的上的...

ZJOI2012 災難 LCA 拓撲排序

阿公尺巴是小強的好朋友。阿公尺巴和小強在草原上捉螞蚱。小強突然想,如果螞蚱被他們捉滅絕了,那麼吃螞蚱的小鳥就會餓死,而捕食小鳥的猛禽也會跟著滅絕,從而引發一系列的生態災難。學過生物的阿公尺巴告訴小強,草原是乙個極其穩定的生態系統。如果螞蚱滅絕了,小鳥照樣可以吃別的蟲子,所以乙個物種的滅絕並不一定會引...