1003 染色
     
 
Time Limit: 1sec    Memory Limit:256MB
Description

今天离散数学课学了有关树的知识,god_v是个喜欢画画的人,所以他喜欢对于一棵树上色,且相邻节点不能染相同颜色,他有k种颜色,他希望他染色完后,这棵树上每种颜色都有,他想请教你有多少种染色方案?由于方案数过大,输出对1e9+7取模的结果。

Input

第一行 n,k表示树的节点和颜色数量(1<=k<=n<=100000)

第二行 n-1个数字,第i个数字表示第i+1个节点的父亲的编号,(f[i]<i+1)
Output

一个数字,表示方案数(%1e9+7)

Sample InputCopy
6 4
1 2 2 4 5
Sample OutputCopy
600

题解:

如果不限制k种颜色全部用上,则方案数为f[k]=k*(k-1)^(n-1)(根节点有k种选择,其他节点有k-1种选择)。限制后,我们可以用容斥定理:ans=f[k] - C(k-1,k)*f[k-1] + C(k-2,k)*f[k-2] - .... + (-1)^(k-1) * C(1,k) * f[1];
f:用快速幂求出
线性求C(i,k) (1<=i<=k):C(i,k) = C(i-1,k) * (i-k+1) / i; 设mod=10^9+7,由于最后答案要%mod,则除以i要转化为乘以i在%mod下的逆元。
线性求逆元: inv[i]=((mod-mod/i))*inv[mod%i]%mod;(inv[i]为i的逆元,emm这里也可以用费马小定理来求)
O(nlogn)

 #include<bits/stdc++.h>
using namespace std; typedef long long LL;
const LL mod=1e9 + ;
const int N=;
LL c[N],inv[N]; void cal_c(int k)
{
inv[]=;
for(LL i=;i<=k;i++)
{
inv[i]=((mod-mod/i))*inv[mod%i]%mod;
}
c[]=;
for(LL i=;i<=k;i++) c[i]=c[i-]*(k-i+)%mod*inv[i]%mod;
} LL pow(LL x,LL y)
{
LL ans=;
while(y)
{
if(y&) ans=ans*x%mod;
x=x*x%mod;
y/=;
}
return ans;
} int main()
{
//freopen("a.in","r",stdin);
LL n,k;
scanf("%lld%lld",&n,&k);
cal_c(k);
LL ans=,f=,now;
for(LL i=k;i>=;i--)
{
now=(((c[i]*i)%mod)*pow(i-,n-))%mod;
ans=(ans+f*now+mod)%mod;
f=-f;
}
printf("%lld\n",ans);
return ;
}

[acmm week12]染色(容斥定理+组合数+逆元)的更多相关文章

  1. HDU 1796How many integers can you find(简单容斥定理)

    How many integers can you find Time Limit: 12000/5000 MS (Java/Others)    Memory Limit: 65536/32768 ...

  2. UVA-11806 Cheerleaders 计数问题 容斥定理

    题目链接:https://cn.vjudge.net/problem/UVA-11806 题意 在一个mn的矩形网格里放k个石子,问有多少方法. 每个格子只能放一个石头,每个石头都要放,且第一行.最后 ...

  3. Codeforces Round #330 (Div. 2) B. Pasha and Phone 容斥定理

    B. Pasha and Phone Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/595/pr ...

  4. hdu_5213_Lucky(莫队算法+容斥定理)

    题目连接:hdu_5213_Lucky 题意:给你n个数,一个K,m个询问,每个询问有l1,r1,l2,r2两个区间,让你选取两个数x,y,x,y的位置为xi,yi,满足l1<=xi<=r ...

  5. How Many Sets I(容斥定理)

    题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3556 How Many Sets I Time Limit: 2 ...

  6. HDU - 4135 Co-prime 容斥定理

    题意:给定区间和n,求区间中与n互素的数的个数, . 思路:利用容斥定理求得先求得区间与n互素的数的个数,设表示区间中与n互素的数的个数, 那么区间中与n互素的数的个数等于.详细分析见求指定区间内与n ...

  7. BZoj 2301 Problem b(容斥定理+莫比乌斯反演)

    2301: [HAOI2011]Problem b Time Limit: 50 Sec  Memory Limit: 256 MB Submit: 7732  Solved: 3750 [Submi ...

  8. BZOJ2839 : 集合计数 (广义容斥定理)

    题目 一个有 \(N\) 个 元素的集合有 \(2^N\) 个不同子集(包含空集), 现在要在这 \(2^N\) 个集合中取出若干集合(至少一个), 使得它们的交集的元素个数为 \(K\) ,求取法的 ...

  9. HDU 1695 GCD 欧拉函数+容斥定理 || 莫比乌斯反演

    GCD Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submiss ...

随机推荐

  1. C++ Primer Plus学习:第九章

    C++第九章:内存模型与名称空间 C++在内存中存储数据方面提供了多种选择.可直接选择保留在内存中的时间长度(存储持续性)以及程序哪一部分可以访问数据(作用域和链接)等. 单独编译 程序分为三个部分: ...

  2. 【第八周】beta阶段事后诸葛亮会议

    本文由宫成荣,武志远共同编写 组名: 新蜂 组长: 武志远 组员: 宫成荣 谢孝淼 杨柳 李峤 项目名称: java俄罗斯方块NEO 会议时间:2016.11.15 18:00~18:40 会议地点: ...

  3. windows下面安装python3遇到的没有添加到环境变量的问题

    windows下面安装python3出现的问题 在官网上面下载最新版的安装包进行安装,并勾选Add Python 3.5 to PATH 安装的过程中可能会出现没有添加到PATH路径的情况 默认的安装 ...

  4. javascript与python的比较

    1:javascript与python大小写皆敏感 2:javascript使用{}来组织代码块,与大部分语言相同  python使用缩进来组织代码块,与大部分语言不同,请务必遵守约定俗成的习惯,坚持 ...

  5. 定制安全的PHP环境

    除了熟悉各种PHP漏洞外,还可以通过配置php.ini来加固PHP的运行环境.PHP官方也曾经多次修改php.ini的默认设置.在本书中,推荐php.ini中一些安全相关参数的配置. register ...

  6. HDU 4758——Walk Through Squares——2013 ACM/ICPC Asia Regional Nanjing Online

    与其说这是一次重温AC自动机+dp,倒不如说这是个坑,而且把队友给深坑了. 这个题目都没A得出来,我只觉得我以前的AC自动机的题目都白刷了——深坑啊. 题目的意思是给你两个串,每个串只含有R或者D,要 ...

  7. bzoj2788-Festival

    题意 有 \(n\) 个变量,有两种限制,分别有 \(m_1,m_2\) 种.限制如下: \(a_x+1=a_y\) \(a_x\le a_y\) 求 \(\{x_i\}\) 集合的大小.\(n\le ...

  8. 洛谷 [USACO09OPEN]工作调度

    题面 读完题,我们会发现有一个很重要的信息,每件物品代价相同,但价值不同.那么我们很容易想到,在满足限制的情况下,我们肯定会选择价值尽可能大的物品. 我们可否用背包来实现呢,答案是否定的,或者说我不会 ...

  9. P2610 [ZJOI2012]旅游

    题目描述 到了难得的暑假,为了庆祝小白在数学考试中取得的优异成绩,小蓝决定带小白出去旅游~~ 经过一番抉择,两人决定将T国作为他们的目的地.T国的国土可以用一个凸N边形来表示,N个顶点表示N个入境/出 ...

  10. oracle 11g用户名的大小写问题

    oracle 11g 用户名和密码默认区分大小写,可更改alter system set sec_case_sensitive_logon=false 设置改为不区分大小写.