ABC187F Close Group
メモ化再帰めっちゃ遅くてビビった
問題
解法
要するに繋がってる同士でグループわけができればいい
1つにならない場合は適当にグループ分けして,その分けたグループ内でもできる限り少ないグループ分けになればよさそう→そういうDPを考える(ここまではできた)
集合S内の部分集合を辿っていく際はこう書けばいいらしい
for(int T=S;--T&=S;)
or
for(int T=S;T>0;T=(T-1)&S)
あとは
f(S):集合Sにおけるグループ分けの最小数
Sはそのままで条件を満たす→1
otherwise f(S)=f(S^T)+f(T)としてこれのminをとってやればOK