原題首先tarjan求割點的重點就是dfn和low陣列的理解。dfn[i]就是時間戳,即在什麼時刻搜尋到了點i,
low[i]則是i點能回溯到的dfn最小的祖先,
搜尋的時候判斷一下當對於點x存在兒子節點y,使得dfn[x]<=low[y]則x一定是割點。
因為只要x的子節點不能回溯到x的上面,就是沒有返祖邊超過x點,那麼割掉x就能造成不連通了
好啦,基本演算法介紹完,就要講幾個問題了。
首先,為什麼此處
low[a]=min(low[a],dfn[p]);
不能寫作
low[a]=min(low[a],low[p]);
在我的理解,由於此處是一張無向圖,我們有雙向建了邊,導致節點可以回溯到它的父節點;
而如果從它的父節點或其父節點的另一棵子樹上有向上很多的返祖邊,
這時把子節點的low值賦為父節點的low,就可能導致其low==其父節點low《其父節點dfn,
從而使本該是割點的點被忽視了,答案就少了,所以就wa了。
另外本題還有幾個注意點:
給的圖不一定是連通圖,即求每個聯通塊的割頂輸出格式別看錯了2333鏈式前向星開邊要2倍《學習筆記》 tarjan 求割點(割頂)
go to the problem 割點 在乙個無向圖中,如果有乙個頂點集合,刪除這個頂點集合以及這個集合中所有頂點相關聯的邊以後,圖的連通分量增多,就稱這個點集為割點集合。如果某個割點集合只含有乙個頂點x 也即是乙個割點集合 那麼x稱為乙個割點。割點 給出乙個n個點,m條邊的無向圖,求圖的割點。輸...
割點 割邊 tarjan
洛谷割點模板題 傳送門 割邊 在連通圖中,刪除了連通圖的某條邊後,圖不再連通。這樣的邊被稱為割邊,也叫做橋。割點 在連通圖中,刪除了連通圖的某個點以及與這個點相連的邊後,圖不再連通。這樣的點被稱為割點。dfs搜尋樹 用dfs對圖進行遍歷時,按照遍歷次序的不同,我們可以得到一棵dfs搜尋樹。樹邊 在搜...
模板 割點(割頂)
給出乙個n個點,m條邊的無向圖,求圖的割點。輸入格式 第一行輸入n,m 下面m行每行輸入x,y表示x到y有一條邊 輸出格式 第一行輸出割點個數 第二行按照節點編號從小到大輸出節點,用空格隔開 n,m均為100000 tarjan 圖不一定聯通!求割點。這可以用到之前學的tarjan。對於一棵生成樹,...