1. 程式人生 > 其它 >CF1559D2 Mocha and Diana (Hard Version)

CF1559D2 Mocha and Diana (Hard Version)

CF1559D2 Mocha and Diana (Hard Version)

思路

以下,兩圖分別稱為 A , B

首先,來證明一個貪心策略:有能連的邊就連,或者說連邊不會影響最大值

考慮一種特殊情況,A 只有兩個聯通塊,記為 x 和 y , B 只有兩個聯通塊

如果從 x 中選出任意一點都無法連線到 y 中任意一點,那麼說明 x 中任意一點和 y 中任意一點在 B 中在一個連通塊內

這樣推得 B 僅有唯一聯通塊,矛盾

所以上述情況一定可以連一條邊

有一個顯然的東西,連一條邊會讓 A 和 B 的聯通塊個數同時減 1 ,所以不難發現如果有 A 或 B 有一邊成樹了,那麼一定沒有可以連的邊了

那麼現在假設 A 有 r 個聯通塊, B 有 c 個聯通塊

不妨假設 A 和 B 中點 1 所在的聯通塊分別為 pa , pb

那麼,將 A 中除去 pa 之外的視為一個整體, B 中同理,就轉換為了上面的特殊情況

於是按上述可以一直連邊直到一邊成為一棵樹,這顯然也是能連的邊數的最大值

那麼貪心策略得證

考慮實現

首先,貪心將所有能和 1 連的點連線

那麼現在圖上只有三類點,在 A 和 B 與 1 聯通,僅在 A 與 1 聯通,僅在 B 與 1 聯通

首先發現,第一類點沒任何用,它不能任何點相連

然後顯然的,一個第二類點可以和任意一個第三類點相連,因為他們不在同一個聯通塊

於是就可以貪心的連線了

只是要注意,連線可能會使後兩類點變為第一類點,判斷一下就好

程式碼

//Nope