BZOJ 4484: [Jsoi2015]最小表示(拓扑排序+bitset)
2024-10-07 14:52:14
解题思路
\(bitset\)维护连通性,给每个点开个\(bitset\),第\(i\)位为\(1\)则表示与第\(i\)位联通。算答案时显然要枚举每条边,而枚举边的顺序需要贪心,一个点先到达的点一定做出的贡献最大,那么就可以先求出拓扑序,然后每个点的儿子按照拓扑序排序。之后倒序枚举每个点确定答案。
代码
#include<bits/stdc++.h>
using namespace std;
const int MOD=1004535809;
const int N=1000005;
typedef long long LL;
int n,k,m,fac[N],inv[N],ans;
inline int fast_pow(int x,int y){
int ret=1;
for(;y;y>>=1){
if(y&1) ret=(LL)ret*x%MOD;
x=(LL)x*x%MOD;
}
return ret;
}
inline int C(int x,int y){
return (LL)fac[x]*inv[y]%MOD*inv[x-y]%MOD;
}
int main(){
scanf("%d%d%d",&n,&m,&k);
fac[0]=fac[1]=1;
for(int i=2;i<=n;i++) fac[i]=(LL)fac[i-1]*i%MOD;
inv[n]=fast_pow(fac[n],MOD-2);
for(int i=n-1;~i;i--) inv[i]=(LL)inv[i+1]*(i+1)%MOD;
for(int i=m;i<=n;i+=k)
ans=(ans+C(n,i))%MOD;
printf("%d\n",ans);
return 0;
}
最新文章
- Python中的range函数用法
- linux shell 脚本获取和替换文件中特定内容
- JSBinding+SharpKit / 菜单介绍
- 如何把项目部署到OSChina上
- 2014年市场需求排名前10的编程语言 - 生命的延续是 BI
- KStar ----BPM应用框架,K2 的新星
- phpwind8.7升级9.0.1过程(三)20130107升级到20130227
- 2016021903 - 下载安装使用Memory Analyzer
- 介绍 - OC中的代理模式
- Android学习路径(23)应用Fragment建立动态UI——Fragment之间的通信
- SSLPinning 延伸
- PHP垃圾回收机制
- jquery-1.4.4.min.js无法解析json中result.data问题
- PS 知识整理
- Android通讯录管理(获取联系人、通话记录、短信消息)
- js实现默认或者触发一个事件选中元素内容的方法
- Linux下 jenkins的安装
- Oracle SQL之 序列使用限制
- 关于Android
- Java深度复制List内容。
热门文章
- C++输出字符指针指向的地址
- [Python3] 021 面向对象 第一弹
- POJ-1679.The Unique MST.(Prim求次小生成树)
- 实现自己的DiscoveryClient
- luoguP1312 Mayan游戏 题解(NOIP2011)
- hdu 4001 To Miss Our Children Time( sort + DP )
- python 谈赋值和copy区别
- uoj396 [NOI2018]屠龙勇士
- 【JAVA】 01-Java基础知识
- elasticsearch 基础 —— 分布式文档存储原理