for(int s=1;s<(1<<k);s++){ for(int i=1;i<=n;i++){ for(int sub=s&(s-1);sub;sub=(sub-1)&s) f[i][s]=min(f[i][s],f[i][sub]+f[i][sub^s]); if(f[i][s]!=inf) q.push(make_pair(-f[i][s],i)); } dij(s); }
枚举子集的 3k3^k3k 要怎么算呢