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);
}
时间: 2024-10-30 02:34:13

BZOJ 1488: [HNOI2009]图的同构 [Polya]的相关文章

BZOJ 1488 [HNOI2009]图的同构 Polya定理

题意:链接 **方法:**Polya定理 解析: 先扯点题外话. 小雨淅沥的下午,PoPoQQQ爷在屠了一道题后放松心情,恰看见我把知识点上的群论标记已会. 于是,为了发扬D人的精神,PoPoQQQ爷打开了BZOJ,给我找了这么一个题,说:"这题都没做过还敢说会群论?" -- -- 征战半下午,卒. (我好菜以后再也不敢说我会啥了T_T (做这道题千万别去OEIS找通项=-=) 好不扯了,言归正传说这道题怎么做. 这道题确实是个好题,跟以前的群论的解法有共同点但是又有新的东西. 反正我

bzoj1488[HNOI2009]图的同构

题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1488 1488: [HNOI2009]图的同构 Time Limit: 10 Sec  Memory Limit: 64 MBSubmit: 591  Solved: 388[Submit][Status][Discuss] Description 求两两互不同构的含n个点的简单图有多少种. 简单图是关联一对顶点的无向边不多于一条的不含自环的图. a图与b图被认为是同构的是指a图的顶点经

【BZOJ】[HNOI2009]有趣的数列

[算法]Catalan数 [题解] 学了卡特兰数就会啦>_<! 因为奇偶各自递增,所以确定了奇偶各自的数字后排列唯一. 那么就是给2n个数分奇偶了,是不是有点像入栈出栈序呢. 将做偶数标为-1,做奇数标为+1,显然当偶数多于奇数时不合法,因为它压不住后面的奇数. 然后其实这种题目,打表就可知啦--QAQ 然后问题就是求1/(n+1)*C(2n,n)%p了,p不一定是素数. 参考bzoj礼物的解法. 看到网上清一色的素数筛+分解质因数解法,不解了好久,感觉写了假的礼物-- 后来觉得礼物的做法才比

BZOJ 1485: [HNOI2009]有趣的数列( catalan数 )

打个表找一下规律可以发现...就是卡特兰数...卡特兰数可以用组合数计算.对于这道题,ans(n) = C(n, 2n) / (n+1) , 分解质因数去算就可以了... ---------------------------------------------------------------------------------- #include<cstdio> #include<cstring> #include<algorithm> using namespa

BZOJ 1485: [HNOI2009]有趣的数列 [Catlan数 质因子分解]

1485: [HNOI2009]有趣的数列 Description 我们称一个长度为2n的数列是有趣的,当且仅当该数列满足以下三个条件: (1)它是从1到2n共2n个整数的一个排列{ai}: (2)所有的奇数项满足a1<a3<…<a2n-1,所有的偶数项满足a2<a4<…<a2n: (3)任意相邻的两项a2i-1与a2i(1≤i≤n)满足奇数项小于偶数项,即:a2i-1<a2i. 现在的任务是:对于给定的n,请求出有多少个不同的长度为2n的有趣的数列.因为最后的答

bzoj 1486: [HNOI2009]最小圈 dfs求负环

1486: [HNOI2009]最小圈 Time Limit: 10 Sec  Memory Limit: 64 MBSubmit: 1022  Solved: 487[Submit][Status] Description 最开始写floyd求负环结果TLE了,改成dfs后速度变成原来的100+倍.反正还是比较神奇.

bzoj 1483: [HNOI2009]梦幻布丁 启发式合并vector

1483: [HNOI2009]梦幻布丁 Time Limit: 10 Sec  Memory Limit: 64 MB[Submit][Status][Discuss] Description N个布丁摆成一行,进行M次操作.每次将某个颜色的布丁全部变成另一种颜色的,然后再询问当前一共有多少段颜色.例如颜色分别为1,2,2,1的四个布丁一共有3段颜色. Input 第一行给出N,M表示布丁的个数和好友的操作次数. 第二行N个数A1,A2...An表示第i个布丁的颜色从第三行起有M行,对于每个操

BZOJ 1486: [HNOI2009]最小圈( 二分答案 + dfs判负圈 )

二分答案m, 然后全部边权减掉m, 假如存在负圈, 那么说明有平均值更小的圈存在. 负圈用dfs判断. --------------------------------------------------------------------------- #include<bits/stdc++.h> #define rep(i, n) for(int i = 0; i < n; ++i) #define clr(x, c) memset(x, c, sizeof(x)) #define

BZOJ 1004: [HNOI2008]Cards Polya计数+DP

Polya计数+dp求满足对应循环的不动点有几个 1004: [HNOI2008]Cards Time Limit: 10 Sec  Memory Limit: 162 MB Submit: 2046  Solved: 1212 [Submit][Status][Discuss] Description 小春现在很清闲,面对书桌上的N张牌,他决定给每张染色,目前小春只有3种颜色:红色,蓝色,绿色.他询问Sun有多少种染色方案,Sun很快就给出了答案.进一步,小春要求染出Sr张红色,Sb张蓝色,S