[SPOJ 839]Optimal Marking(最小割)

【题目大意】:

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

【题目分析】:

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

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

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

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

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

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

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值