有个代码看不懂,求解释问号那句话,

P4011 孤岛营救问题

这是一种比较~~装逼~~高端的写法 我们来看一下 ` if( U.x%(e[i].rar<<1) >= e[i].rar ) ` <<运算符表示对`e[i].rar`左移,即*2 观察代码发现 `e数组`中存储的是静态邻接表,即前向星 %运算表示取模,即让`U.x对2*e[i].rar`取模,也就是对钥匙状态取模 再看一下,后面写的是`>=e[i].rar` 那么,答案就呼之欲出了! 在程序中,使用spfa求解,`U.x`表示队首钥匙状态,若`U.x`对`e[i].rar`取模,大于`e[i].rar`,说明该点可以进行更新,因此有了这种高端写法 @[zhangjunhuai](/space/show?uid=84095)
by 狸狸养的敏敏 @ 2018-10-24 17:26:28


@[P指向NULL](/space/show?uid=58399) 取模是干了什么?,还是不懂,我直接意会就是e[i].rar表示这个点需要的钥匙,或者不需要钥匙,当前节点有符合这个门的钥匙。
by Zroom @ 2018-10-24 18:17:21


取模就是压位啊,难道你不是用的状压?
by 狸狸养的敏敏 @ 2018-10-24 18:23:50


@[zhangjunhuai](/space/show?uid=84095)
by 狸狸养的敏敏 @ 2018-10-24 18:23:54


@[P指向NULL](/space/show?uid=58399) 取模是防止数字过大吗?新学不太懂
by Zroom @ 2018-10-24 18:41:23


@[zhangjunhuai](/space/show?uid=84095) Emmm 这是一道网络流+状压啊 然后`U.x%2*e[i].rar`相当于让`U.x|e[i].rar`把(应该是这样,毕竟我才是蒟蒻)
by 狸狸养的敏敏 @ 2018-10-24 18:43:59


@[P指向NULL](/space/show?uid=58399) 我觉得是截取e[i].rar那么多位,然后和e[i].rar比较,如果比他大,说明已有的钥匙比他门要的钥匙多,因为这题每个门只要一种钥匙,所以e[i].rar二进制中只有一个1 ,就可以这么写。
by Zroom @ 2018-10-24 19:11:09


|