for(rg int i=2;i<=all;++i) {
for(rg int s0=i-1;s0;s0=(s0-1)&i) if((gorf[s0]|i) == gorf[s0]) {
for(rg int i=2;i<=all;++i) {
for(rg int s0=(i-1)&i;s0;s0=(s0-1)&i) if((gorf[s0]|i) == gorf[s0]) {
这里为什么不是 s0=(i-1)&i 而写成 s0=i-1 ?
是否是因为
for(rg int s0=i-1;s0;s0=(s0-1)&i) if((gorf[s0]|i) == gorf[s0]) {
int _sum=0;
int ss=s0^i;
for(rg int k=0;k<n;++k) if((1<<k)&ss) {
int _temp=INF;
for(rg int h=0;h<n;++h) if((1<<h)&s0) {
_temp=mmin(_temp,dis[h][k]);
}
_sum+=_temp;
}
中需要判断能否从 s0 每个点一步转移到 i 状态呢?
如果有 s0⊆i 且 s0 中点一步能够转移到 i 状态是不是就寄了,还是说后面代码有些地方保证了,求教