zoukankan      html  css  js  c++  java
  • 状态压缩 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
    ",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;
    }
  • 相关阅读:
    文件隐藏在一张图片里
    晶振
    主宰全球的10大算法
    java+mysql连接的优化
    排序剔除
    js数据类型
    字符实体
    表单
    定义样式表
    布局相关的属性
  • 原文地址:https://www.cnblogs.com/cherryMJY/p/6129441.html
Copyright © 2011-2022 走看看