1737 Connected Graph
問題概要
頂点数nの単純無向グラフで、連結なものはいくつあるか求めよ。
n≦18とする。
解法
n≦7くらいまでは全探索できるので、全探索したの結果を数列辞典で検索(酷
表があったので埋め込みしてサブミット。
ソースコード
小さいケースをテストしたコード。
int bit(int b) { int r=0; for(;b;b&=b-1)r++; return r; } int p[10]; int root(int x) { if(x==p[x])return x; return p[x]=root(p[x]); } int solve(int c) { int ret=0; rep(i,1<<c*(c-1)/2) { rep(j,c)p[j]=j; rep(j,c*(c-1)/2)if(1<<j&i) { int a,b=j; for(a=0;;a++) { if(b<a)break; b-=a; } a=root(a); b=root(b); if(a<b)swap(a,b); if(a!=b)p[a]=b; } rep(j,c)if(root(j)!=0)goto FAIL; ret++; FAIL:; } return ret; } int main() { rep(n,7)cout<<solve(n+1)<<endl; return 0; }