[SPOJ 839]Optimal Marking(最小割)

来源:互联网 发布:佳能2525i网络设置 编辑:程序博客网 时间:2024/05/06 16:56

【题目大意】:

给你一个无向图,现已知一些点的编号,让你给另一些点编号,使得边权值和最小。边权的计算方法就是将两个端点的编号xor一下。

【题目分析】:

乍一看,觉得这个东西确实很悲剧~~xor这个东西实在是一个不太好的操作。

但是仔细想想的话,xor这种二进制位操作位与位之间是互不影响的。所以我们只要保证异或出来的东西每一位都尽量小就可以了。这就是这个题出xor的原因了,别的东西搞不出来。

xor是一个非常有意思的运算,对于位来说,只有进行xor的两个位不一样的时候得到的值是1,否则是0。举一个我最爱举的例子,所有的二进制位运算都可以想象成你想去公园,你的爸爸妈妈要投票表决。and就是你爸你妈都同意你才能去,or就是你爸你妈只要一个同意你就可以去,然后最悲剧的就是xor,就是你爸你妈必须打起来你才能去…………:-)~~

这样我们实际上就是让编号不一样的位尽量少。那就把编号拆到位的级别,每一位都进行一次决策。这样我们就可以想象成我要将所有点的这个位分成两类,一类是1,一类是0,而跨越这两类之间的边就是我要花费的代价,当然就是边权。这就是一个最小割了~~

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

【代码(不知道为什么特别慢~~)】:

 

原创粉丝点击