HDU 3091 Necklace
Posted BK_201
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了HDU 3091 Necklace相关的知识,希望对你有一定的参考价值。
题目:http://acm.hdu.edu.cn/showproblem.php?pid=3091
题意:给你一些珠子,某些珠子之间可以互相连接,问可以连成多少种不同的项链
我们只需要从任意一个点出发,最后再回到这个点就能保证不会重复
#include<iostream> #include<cstdio> #include<cstring> #include<string> #include<cmath> #include<algorithm> #include<vector> #include<queue> #include<stack> #include<map> #include<set> using namespace std; long long dp[1<<18][18]; int a[20][20]; int main() { ios::sync_with_stdio(false); int n,m; while(cin>>n>>m) { memset(a,0,sizeof(a)); while(m--) { int x,y; cin>>x>>y; x--;y--; a[x][y]=a[y][x]=1; } memset(dp,0,sizeof(dp)); dp[1][0]=1; int tot=1<<n; for(int i=0;i<tot;i++) { for(int k=0;k<n;k++) { if (dp[i][k]==0) continue; for(int j=0;j<n;j++) { if ((i>>j)&1) continue; if (a[k][j]) dp[i|(1<<j)][j]+=dp[i][k]; } } } long long s=0; for(int i=0;i<n;i++) if (a[i][0]) s+=dp[tot-1][i]; cout<<s<<endl; } return 0; }
以上是关于HDU 3091 Necklace的主要内容,如果未能解决你的问题,请参考以下文章
HDU 1817Necklace of Beads(置换+Polya计数)