[acmm week12]染色(容斥定理+组合数+逆元)
|
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 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]染色(容斥定理+组合数+逆元)的更多相关文章
- HDU 1796How many integers can you find(简单容斥定理)
How many integers can you find Time Limit: 12000/5000 MS (Java/Others) Memory Limit: 65536/32768 ...
- UVA-11806 Cheerleaders 计数问题 容斥定理
题目链接:https://cn.vjudge.net/problem/UVA-11806 题意 在一个mn的矩形网格里放k个石子,问有多少方法. 每个格子只能放一个石头,每个石头都要放,且第一行.最后 ...
- 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 ...
- hdu_5213_Lucky(莫队算法+容斥定理)
题目连接:hdu_5213_Lucky 题意:给你n个数,一个K,m个询问,每个询问有l1,r1,l2,r2两个区间,让你选取两个数x,y,x,y的位置为xi,yi,满足l1<=xi<=r ...
- How Many Sets I(容斥定理)
题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3556 How Many Sets I Time Limit: 2 ...
- HDU - 4135 Co-prime 容斥定理
题意:给定区间和n,求区间中与n互素的数的个数, . 思路:利用容斥定理求得先求得区间与n互素的数的个数,设表示区间中与n互素的数的个数, 那么区间中与n互素的数的个数等于.详细分析见求指定区间内与n ...
- BZoj 2301 Problem b(容斥定理+莫比乌斯反演)
2301: [HAOI2011]Problem b Time Limit: 50 Sec Memory Limit: 256 MB Submit: 7732 Solved: 3750 [Submi ...
- BZOJ2839 : 集合计数 (广义容斥定理)
题目 一个有 \(N\) 个 元素的集合有 \(2^N\) 个不同子集(包含空集), 现在要在这 \(2^N\) 个集合中取出若干集合(至少一个), 使得它们的交集的元素个数为 \(K\) ,求取法的 ...
- HDU 1695 GCD 欧拉函数+容斥定理 || 莫比乌斯反演
GCD Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submiss ...
随机推荐
- sql高级主题资料(网络复制)
SQL Server 常用高级语法笔记 自从用了EF后很少写sql和存储过程了,今天需要写个比较复杂的报告,翻出了之前的笔记做参考,感觉这个笔记还是很有用的,因此发出来和大家分享. 1.case. ...
- mnist测试
第一步:进入caffe目录 第二步:获取mnist数据集 ./data/mnist/get_mnist.sh 第三步:创建lmdb ./examples/mnist/create_mnist.sh 第 ...
- QThread安全的结束线程
版权声明:若无来源注明,Techie亮博客文章均为原创. 转载请以链接形式标明本文标题和地址: 本文标题:QThread安全的结束线程 本文地址:http://techieliang.com/ ...
- BZOJ1996 HNOI2010合唱队(区间dp)
设f[i][j][0/1]表示i~j这段区间上一次选择的是最左/最右人的方案数.转移显然. #include<iostream> #include<cstdio> #inclu ...
- OSPF协议介绍及配置 (下)
4.特殊区域详解 为了让我们的讲解更加的通俗易懂,我们看上面这个拓扑,这是一个根据客户业务逻辑结构所涉及的OSPF网络,共有三个区域(实际上远远不止),骨干区域area0为一级行及二级行所部署,*** ...
- Astronauts UVALive - 3713(2-SAT)
大白书例题 #include <iostream> #include <cstdio> #include <sstream> #include <cstrin ...
- Django字段类型介绍
一,通过makemigrations,migrate来修改数据, 1.Django的ORM支持修改表结构,修改完以后,执行 python manage.py makemigrations pytho ...
- 【BZOJ1458】【洛谷4311】士兵占领(网络流)
[BZOJ1458][洛谷4311]士兵占领(网络流) 题面 BZOJ权限题,洛谷真好 Description 有一个M * N的棋盘,有的格子是障碍.现在你要选择一些格子来放置一些士兵,一个格子里最 ...
- SSH不能连接并提示REMOTE HOST IDENTIFICATION HAS CHANGED解决
SSH不能连接并提示REMOTE HOST IDENTIFICATION HAS CHANGED解决方法: 如果提示信息如下: @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ ...
- Codeforces 671D. Roads in Yusland(树形DP+线段树)
调了半天居然还能是线段树写错了,药丸 这题大概是类似一个树形DP的东西.设$dp[i]$为修完i这棵子树的最小代价,假设当前点为$x$,但是转移的时候我们不知道子节点到底有没有一条越过$x$的路.如果 ...