題目讓我們求一棵給定的樹有多少環上點度數均為 \(3\) 的基環樹。
容易想到,新新增的環連線的兩個節點一定都是度數為 \(2\) 的點,且這兩個點之間所有節點的度數均為 \(3\)。
所以我們可以找到每一個由度數為 \(3\) 的點組成的連通塊,並對於每一個連通塊找到它的邊緣有幾個度數為 \(2\) 的點。
設度數為 \(2\) 的點的個數為 \(sum\),那麼該連通塊能夠產生的貢獻顯然就是這 \(sum\) 個點中選任意兩個點的方案數,顯然就是 \(sum\cdot(sum-1)\over 2\)。
找連通塊的時候我們用一個 \(vis\) 陣列標記已經找過的點,每次只對度數為 \(3\) 且之前沒被標記的點進行搜尋,這樣可以保證不重不漏。
提交記錄