- Quiz
- AC
- 感想
- 似たのが来たら貼るぞ!
- 距離行列やdpテーブルで未記入の-1やinfが混乱しがち
- 訪れたらフラグを上げるのか下げるのか意識する
- 開始位置に戻る/戻らないの違いはほぼない。戻らなくていいなら開始位置のフラグを最初から立てておくだけ
bool is_connected(VV& G){
ll N = G.size();
dsu uf(N);
rep(i,N){
FOR(j,i+1,N){
if(G[i][j]>=0)uf.merge(i,j);
}
}
return uf.groups().size()==1;
}
ll visit_all_city(VV& G){
if(!is_connected(G)){
debug("グラフが連結でないので全てを訪れることはできません");
return inf;
}
ll N = G.size();
VV dp(1LL<<N, VI(N, -1));
function<ll(ll,ll)> rec = [&](ll f, ll now){
if(dp[f][now]!=-1) return dp[f][now];
ll mi = inf;
rep(i, N){
if(f>>i&1)continue;
if(G[now][i]==-1)continue;
ll d = G[now][i] + rec(f|1LL<<i, i);
chmin(mi, d);
}
return dp[f][now] = mi;
};
ll all = (1LL<<N)-1;
rep(i,N){
dp[all][i]=0;
}
ll mi = inf;
rep(i,N){
chmin(mi, rec(1LL<<i, i));
}
return mi;
}