bzoj1478/1815[Shoi2006]color 有色图

2024-05-11 23:58

本文主要是介绍bzoj1478/1815[Shoi2006]color 有色图,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

题目链接:bzoj1478  bzoj1815

题意:
染色图是无向完全图,且每条边可被染成M种颜色中的一种。两个染色图是同构的,当且仅当可以改变一个图的顶点的编号,使得两个染色图完全相同。问N个顶点,M种颜色,本质不同(两两互不同构)的染色图个数(模质数P)。(1<=N<=53,1<=M<=1000,N<P<=109,时间限制10s)

题解:
置换-ploya

双倍经验喔


关于这题,这文档讲得很清楚:http://wenku.baidu.com/view/fee9e9b9bceb19e8b8f6ba7a.html?from=search###
这题想起来挺难的。
首先它是对点的置换,但是是边染上了颜色,就是说实际上是边的置换。所以我们要看一下点置换和边置换之间的关系。
假定一个点置换,把它表示为循环,比如是(a1,a2,....)(b1,b2...)(c1,c2...)...
1、对于不在一个循环里面的点:
比如a1,b1, 那么会有边循环((a1,b1),(a2,b2)...) 设a循环的循环节是l1,b循环的循环节是l2,那么形成的边循环的循环节显然是LCM(l1,l2)。
一共有l1*l2个点对,每个点对都在一个循环节为LCM(l1,l2)的循环上,所以一共有l1*l2/LCM(l1,l2)=GCD(l1,l2)个循环节,所以C(f)=m^GCD(l1,l2)。(回到burnside引理,C为置换之后仍为本身的数目,就是说要循环节里的每条边都一样的颜色)
2、对于在一个循环里面的点:
比如a1、a2。设这个a循环的循环节为l1。
如果l1是奇数,那么循环长度为l1,一共有C(l1,2)个点对,所以是(l1-1)/2个循环节,所以C(f)=m^((l1-1)/2)。
如果l1是偶数,除了上面这种情况之外,还有一种的循环节是l1/2(就是两个点刚好相隔半个周期,而边是双向的),所以一共有(C(l1,2)-l1/2)/l1+1=l1/2个点对。
整理一下:


题解引用hyc的


也许最好什么都预处理一下。比如预处理gcd什么的,效果:时间减半。让我卡时过了..

#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
typedef long long LL;
#define maxn 60LL fac[maxn],l[maxn],gd[maxn][maxn],ans,n,m,mod;
LL gcd(LL a,LL b) {return (b==0)?a:gcd(b,a%b);}
LL qpow(LL x,LL t)
{LL ret=1;while (t){if (t&1) ret=(ret*x)%mod;x=(x*x)%mod;t>>=1;}return ret;
}
void get_ans(LL cnt)
{LL i,j,C=0;for (i=1;i<=cnt;i++) C=C+l[i]/2;for (i=1;i<cnt;i++)for (j=i+1;j<=cnt;j++)C=C+gd[l[i]][l[j]];LL now=1,tt=0;for (i=1;i<=cnt;i++){if (l[i]!=l[i-1]){now=(now*fac[tt])%mod;tt=0;}tt++;}now=(now*fac[tt])%mod;for (i=1;i<=cnt;i++) now=(now*l[i])%mod;LL S=(fac[n]*qpow(now,mod-2))%mod;ans=(ans+(S*qpow(m,C))%mod)%mod;
}
void div(LL cnt,LL x,LL ret)
{if (ret==0) {get_ans(cnt);return;}if (ret<x) return;cnt++;while (x<=ret){l[cnt]=x;div(cnt,x,ret-x);x++;}
}
int main()
{LL i,j;scanf("%lld%lld%lld",&n,&m,&mod);for (i=1;i<=n;i++)for (j=i;j<=n;j++) gd[i][j]=gd[j][i]=gcd(i,j);fac[0]=1;for (i=1;i<=n;i++) fac[i]=(fac[i-1]*i)%mod;ans=0;div(0,1,n);printf("%lld\n",(ans*qpow(fac[n],mod-2))%mod);return 0;
}


这篇关于bzoj1478/1815[Shoi2006]color 有色图的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/981022

相关文章

三色标记(Tri-color marking)

维基百科部分 原文 https://en.wikipedia.org/wiki/Tracing_garbage_collection#TRI-COLOR Because of these performance problems, most modern tracing garbage collectors implement some variant of the tri-color ma

HDU 1556 Color the ball (树状数组-- 区间更新,单点求值)

OJ题目 :点这里~~ 与 单点更新,区间求值 稍有不同,需要理解注意。 AC_CODE int n;int num[100002];int lowbit(int x){return x&(-x);}int sum(int x){int ret = 0;while(x > 0){ret += num[x];x -= lowbit(x);}return ret;}void ad

[C++] 将LONG类型的color值转换为RGB值

转换原理: The calculation is: (65536 * Blue) + (256 * Green) + (Red) 'Convert RGB to LONG: LONG = B * 65536 + G * 256 + R       'Convert LONG to RGB:  B = LONG \ 65536  G = (LONG - B * 65536) \ 256  R =

记一次解析Pantone Color TCX 色彩码

第一次尝试解析TCX 第二次尝试解析TPG 第三次一次到位TCX&TPG ①打开潘通·中国官网 ②在找寻潘通色彩一栏输入TCX,提交 ③浏览器F12,找到搜索结果所在的div,右键copy element ④文本文档修改文件类型为js,并粘贴上一部的结果,将其赋值给str str='<div class="colorInfo" id="fashionColorDiv"><a class

ABAP OOALV 颜色COLOR设置

文章目录 行颜色、列颜色、单元格颜色设置COLOR行颜色设定实现过程运行结果 列颜色的设置实现过程运行结果 设置单元格颜色完成过程运行结果1运行结果2 行颜色、列颜色、单元格颜色设置COLOR 行颜色设定 参考文章:https://blog.csdn.net/Leo520liang/article/details/138697189 实现过程 TYPES: BEG

有色冶炼行业中的智能电动机保护器

低压电动机作为有色冶炼企业底层大量使用的设备,其异常运行不仅影响冶炼厂的正常生产,还会 威胁到人的生命安全,因此为电动机设置合适而又全面的保护至关重要。智能电动机保护器集保护、 遥测、通信、遥控、显示等功能于一体,是目前功能全面的电动机保护设备,能最大限度保证设备运行 的安全可靠性,从而实现智能化和高精度保护,同时还能对电动机的状态进行全面监控。 一、电动机过载保护设备的发展 1.1 热继电器

poj 2154 Color(polya计数 + 欧拉函数优化)

http://poj.org/problem?id=2154 大致题意:由n个珠子,n种颜色,组成一个项链。要求不同的项链数目,旋转后一样的属于同一种,结果模p。 n个珠子应该有n种旋转置换,每种置换的循环个数为gcd(i,n)。如果直接枚举i,显然不行。但是我们可以缩小枚举的数目。改为枚举每个循环节的长度L,那么相应的循环节数是n/L。所以我们只需求出每个L有多少个i满足gcd(

A. Find Color

A. Find Color time limit per test 2 seconds memory limit per test 256 megabytes input standard input output standard output Not so long ago as a result of combat operations the main Berl

MSRCR(Multi-Scale Retinex with Color Restore)

引言 始于Edwin Herbert Land(埃德温·赫伯特·兰德)于1971年提出的一种被称为色彩恒常的理论,并基于此理论的图像增强方法。Retinex这个词由视网膜(Retina)和大脑皮层(Cortex)合成而来.之所以这样设计,表明Land他也不清楚视觉系统的特性究竟取决于此两个生理结构中的哪一个,抑或两者都有关系。不同于传统的图像增强算法,如线性、非线性变换、图像锐化等只能增强图像

OpenCV, color reduction method

转载请注明出处!!!http://blog.csdn.net/zhonghuan1992 OpenCV, colorreduction method 目标:          这次学习的目标是回答下面的几个问题:                   1 图片像素是如何被扫描的?                    2OpenCV 矩阵值如何被存储?