首页 > 代码库 > 状态压缩 HDU 3091
状态压缩 HDU 3091
多组数据
n个点m条边
求有几个经过所有的点的环
最好用__int64
#include<stdio.h> #include<algorithm> #include<string.h> using namespace std; typedef __int64 LL; #define MAXN 1<<18 bool x[20][20]; LL dp[MAXN][20]; void solve(int n) { int en=(1<<n); dp[1][0]=1; for(int i=1;i<en;i++) { for(int j=0;j<n;j++) { if(dp[i][j]) { for(int k=1;k<n;k++) { if((!(i&(1<<k)))&&x[j][k]) dp[i|(1<<k)][k]+=dp[i][j]; } } } } LL ans=0; en--; for(int i=1;i<n;i++) if(x[0][i]) ans+=dp[en][i]; printf("%I64d\n",ans); } int main() { int n,m; while(scanf("%d%d",&n,&m)!=EOF) { memset(dp,0,sizeof(dp)); memset(x,0,sizeof(x)); for(int i=0;i<m;i++) { int u,v; scanf("%d%d",&u,&v); u--; v--; x[u][v]=1; x[v][u]=1; } solve(n); } return 0; }
状态压缩 HDU 3091
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。