1. 程式人生 > >[SPOJ 839]Optimal Marking(最小割)

[SPOJ 839]Optimal Marking(最小割)

【題目大意】:

給你一個無向圖,現已知一些點的編號,讓你給另一些點編號,使得邊權值和最小。邊權的計算方法就是將兩個端點的編號xor一下。

【題目分析】:

乍一看,覺得這個東西確實很悲劇~~xor這個東西實在是一個不太好的操作。

但是仔細想想的話,xor這種二進位制位操作位與位之間是互不影響的。所以我們只要保證異或出來的東西每一位都儘量小就可以了。這就是這個題出xor的原因了,別的東西搞不出來。

xor是一個非常有意思的運算,對於位來說,只有進行xor的兩個位不一樣的時候得到的值是1,否則是0。舉一個我最愛舉的例子,所有的二進位制位運算都可以想象成你想去公園,你的爸爸媽媽要投票表決。and就是你爸你媽都同意你才能去,or就是你爸你媽只要一個同意你就可以去,然後最悲劇的就是xor,就是你爸你媽必須打起來你才能去…………:-)~~

這樣我們實際上就是讓編號不一樣的位儘量少。那就把編號拆到位的級別,每一位都進行一次決策。這樣我們就可以想象成我要將所有點的這個位分成兩類,一類是1,一類是0,而跨越這兩類之間的邊就是我要花費的代價,當然就是邊權。這就是一個最小割了~~

呵呵,是不是很神奇~~膜拜Amber神牛……

【程式碼(不知道為什麼特別慢~~)】: