zoukankan      html  css  js  c++  java
  • BZOJ 1488: [HNOI2009]图的同构 [Polya]

    完全图中选出不同构的简单图有多少个

    上题简化版,只有两种颜色....直接copy就行了

    太诡异了,刚才电脑上多了一个不动的鼠标指针,然后打开显卡管理界面就没了

    #include<iostream>
    #include<cstdio>
    #include<cstring>
    #include<algorithm>
    #include<cmath>
    using namespace std;
    const int N=65,P=997;
    typedef long long ll;
    inline int read(){
        char c=getchar();int x=0,f=1;
        while(c<'0'||c>'9'){if(c=='-')f=-1; c=getchar();}
        while(c>='0'&&c<='9'){x=x*10+c-'0'; c=getchar();}
        return x*f;
    }
    int n,m=2;
    int inv[N],fac[N],facInv[N];
    void ini(){
        inv[1]=1;fac[0]=facInv[0]=1;
        for(int i=1;i<=n;i++){
            if(i!=1) inv[i]=-P/i*inv[P%i]%P;
            if(inv[i]<0) inv[i]+=P;
            fac[i]=fac[i-1]*i%P;
            facInv[i]=facInv[i-1]*inv[i]%P;
        }
    }
    int L[N],tot;
    int sum,ans;
    inline int gcd(int a,int b){return b==0 ? a : gcd(b,a%b);}
    inline int Pow(int a,int b){
        int re=1;
        for(;b;b>>=1,a=a*a%P)
            if(b&1) re=re*a%P;
        return re;
    }
    inline void mod(int &x){if(x>=P) x-=P;}
    void dfs(int d,int now){
        if(d==n){
            int lo=0;
            int cnt=fac[n],same=1;
            sort(L+1,L+1+tot);
            for(int i=1;i<=tot;i++){
                lo+=L[i]/2;
                for(int j=i+1;j<=tot;j++) lo+=gcd(L[i],L[j]);
    
                cnt=cnt*inv[L[i]]%P;
                if(i!=1&&L[i]==L[i-1]) same++;
                else if(same!=1) cnt=cnt*facInv[same]%P,same=1;
            }
            if(same!=1) cnt=cnt*facInv[same]%P;
            mod(sum+=cnt);
            mod(ans+=cnt%P*Pow(m,lo)%P);
        }else{
            for(int j=now;d+j<=n;j++){
                L[++tot]=j;
                dfs(d+j,j);
                tot--;
            }
        }
    }
    int main(){
        //freopen("in","r",stdin);
        n=read();
        ini();
        dfs(0,1);
        ans=ans*Pow(sum,P-2)%P;
        printf("%d",ans);
    }
  • 相关阅读:
    前端诡异参数start
    JDK常用命令(二)jstack
    JDK常用命令(一)jps、jstat
    C#反射之基础应用
    c#实现随鼠标移动窗体
    c# 使用api函数 ShowWindowAsync 控制窗体
    简单例子快速了解事件处理和委托 event delegate
    通过 WIN32 API 实现嵌入程序窗体
    C# 轻松实现对窗体(Form)换肤[转]
    C#正则表达式匹配HTML中的图片路径
  • 原文地址:https://www.cnblogs.com/candy99/p/6484522.html
Copyright © 2011-2022 走看看