题目链接
做法
考虑形成环的条件是将若干环和基环內向树拆成若干条链,然后依次拼接成环(特判给出的图已经是完整一个环的情况)。
枚举每一个连通块。若该联通块是一个环,则断开代价最小的边;否则进行拓扑排序。
先考虑不在环上的部分。假如一个点他有若干入度,显然只有其中一个入度能够保留,贪心地保留代价最大的入度。如此化简后得到一个环(环上每个点可能有一条不在环上的链)。
然后在环上DP。由于环一定要断开,令 $ f[i][0/1][0/1] $ 表示环上第 $ i $ 个点,环有/没有被断开过,这个点选择的是断开环上的边还是链上的边。
时间复杂度 $ O(n) $ 。
1 |
|