POJ 1838 解題報告

問題翻譯


      一個點用座標(x,y)表示,如果兩個點在水平方向或垂直方向上相鄰,則兩個點屬於一個區域,即點1(x1,y1),點2(x2,y2)相鄰當且僅當x1==x2,|y1-y2|=1或者|x1-x2|=1,y1=y2。給定一些點,相鄰的點構成一個區域,求出k個區域所能擁有的最大點數。(k不大於區域數)。


解決思路


可用並查集解決,一個區域表示爲一個並查集,兩個區域相鄰時,合併這兩個並查集。同時記錄並查集中的點數目。

初始時,每個點爲一個並查集。

對x座標相同、y座標相差爲1的點,合併它們所在的並查集,合併時需要判斷兩個點是否位於同一個集合。合併時需要先找到各自集合的根節點,然後讓其中一個根節點指向另一個根節點完成合並。

對y座標相同、x座標相差爲1的點,合併它們所在的並查集。

當所有相鄰點進行了合併操作之後,對並查集點數目從大到小排序,取前K個值的總和作爲結果輸出。



解題源碼,請訪問:http://www.51ojr.com/report/full/44

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章