BZOJ 1494 生成树计数(生成树计数-矩阵)
题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1494
题意:
思路:
int SIZE; struct matrix { i64 a[N][N]; void init(int x) { clr(a,0); if(x) { int i; FOR0(i,SIZE) a[i][i]=1; } } matrix operator*(matrix p) { matrix ans; ans.init(0); int i,j,k; FOR0(k,SIZE) FOR0(i,SIZE) FOR0(j,SIZE) { ans.a[i][j]+=a[i][k]*p.a[k][j]%mod; ans.a[i][j]%=mod; } return ans; } matrix pow(i64 n) { matrix ans,p=*this; ans.init(1); while(n) { if(n&1) ans=ans*p; p=p*p; n>>=1; } return ans; } }; matrix a; const int val[]={1,1,1,3,16,125}; int status[N],hash[1<<15]; int S[N],K; i64 n; i64 c[N]; void DFS(int dep,int st) { if(dep==K) { c[SIZE]=1; int a[10]={0},i; FOR0(i,K) a[st>>(i*3)&7]++; FOR0(i,K) c[SIZE]*=val[a[i]]; status[SIZE]=st; hash[st]=SIZE++; return; } int temp=-1,i; FOR0(i,dep) upMax(temp,st>>(i*3)&7); for(i=0;i<=temp+1;i++) { DFS(dep+1,st<<3|i); } } int find(int x) { if(S[x]!=x) S[x]=find(S[x]); return S[x]; } int cal() { int visit[N]={0},tot=0,st=0,i,j; for(i=K-1;i>=0;i--) if(!visit[i]) { visit[i]=1; st|=tot<<(i*3); for(j=i-1;j>=0;j--) if(find(i+1)==find(j+1)) { visit[j]=1,st|=tot<<(j*3); } tot++; } return hash[st]; } void deal(int s,int mask) { int i,j; for(i=0;i<=K;i++) S[i]=i; for(i=0;i<K;i++) for(j=i+1;j<K;j++) { if((status[s]>>(i*3)&7)==(status[s]>>(j*3)&7)) { int px=find(i); int py=find(j); if(px!=py) S[px]=py; } } for(i=0;i<K;i++) if(mask&(1<<i)) { int px=find(i); int py=find(K); if(px==py) return; //保证无环存在 S[px]=py; } for(i=1;i<=K;i++) if(find(i)==find(0)) break; if(i>K) return; //保证连通性 a.a[s][cal()]++; } int main() { while(scanf("%d%lld",&K,&n)!=-1) { a.init(0); SIZE=0; DFS(0,0); int i,j; FOR0(i,SIZE) FOR0(j,1<<K) deal(i,j); a=a.pow(n-K); i64 ans=0; FOR0(i,SIZE) (ans+=c[i]*a.a[i][0])%=mod; printf("%lld\n",ans); } }
BZOJ 1494 生成树计数(生成树计数-矩阵)的更多相关文章
- bzoj 2111: [ZJOI2010]Perm 排列计数 (dp+卢卡斯定理)
bzoj 2111: [ZJOI2010]Perm 排列计数 1 ≤ N ≤ 10^6, P≤ 10^9 题意:求1~N的排列有多少种小根堆 1: #include<cstdio> 2: ...
- bzoj 4031: 小Z的房间 矩阵树定理
bzoj 4031: 小Z的房间 矩阵树定理 题目: 你突然有了一个大房子,房子里面有一些房间.事实上,你的房子可以看做是一个包含n*m个格子的格状矩形,每个格子是一个房间或者是一个柱子.在一开始的时 ...
- bzoj 1494 生成树计数
坑了好多天的题,终于补上了 首先发现 \(i\) 这个点和 \(i-k\) 之前的点没有边,所以 \(i-k\) 之前的点肯定联通,只要处理中间 \(k\) 个点的联通状态就好了.我们用最小表示法,\ ...
- 【BZOJ 1494】【NOI 2007】生成树计数
http://www.lydsy.com/JudgeOnline/problem.php?id=1494 这道题..因为k很小,而且我们只关心连续的k个节点的连通性,所以把连续的k个点轮廓线上的连通性 ...
- 生成树的计数 Matrix-Tree(矩阵树)定理
信息学竞赛中,有关生成树的最优化问题如最小生成树等是我们经常遇到的,而对生成树的计数及其相关问题则少有涉及.事实上,生成树的计数是十分有意义的,在许多方面都有着广泛的应用.本文从一道信息学竞赛中出现的 ...
- HDU 5304(Eastest Magical Day Seep Group's Summer-环加外向树生成树计数)[Template:Kirchhoff矩阵]
Eastest Magical Day Seep Group's Summer Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 655 ...
- 【BZOJ 4180】 4180: 字符串计数 (SAM+二分+矩阵乘法)
4180: 字符串计数 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 164 Solved: 75 Description SD有一名神犇叫做Oxe ...
- 【BZOJ 1016】 1016: [JSOI2008]最小生成树计数 (DFS|矩阵树定理)
1016: [JSOI2008]最小生成树计数 Description 现在给出了一个简单无向加权图.你不满足于求出这个图的最小生成树,而希望知道这个图中有多少个不同的最小生成树.(如果两颗最小生成树 ...
- [BZOJ 4818/LuoguP3702][SDOI2017] 序列计数 (矩阵加速DP)
题面: 传送门:https://www.lydsy.com/JudgeOnline/problem.php?id=4818 Solution 看到这道题,我们不妨先考虑一下20分怎么搞 想到暴力,本蒟 ...
随机推荐
- hdu 3572 Task Schedule 网络流
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3572 Our geometry princess XMM has stoped her study i ...
- BZOJ2039 [2009国家集训队]employ人员雇佣
AC通道:http://www.lydsy.com/JudgeOnline/problem.php?id=2039 鉴于一开始看题如果不仔细是看不懂题目的,还是说一下题目大意 [题目大意]:给定n个人 ...
- linux install
http://www.ubuntu.org.cn/index_kylin 先在官网下个Ubuntu 是个iso 然后下个UltraISO 是个软件 插好空u盘 打开软件 在菜单栏上 点击 文件-&g ...
- .NET设计模式(14):代理模式(Proxy Pattern)(转)
摘要:在软件系统中,有些对象有时候由于跨越网络或者其他的障碍,而不能够或者不想直接访问另一个对象,如果直接访问会给系统带来不必要的复杂性,这时候可以在客户程序和目标对象之间增加一层中间层,让代理对象来 ...
- PHP合并数组array_merge函数运算符加号与的区别
两个的区别是:1.数组键名为数字键名时,要合并的两个数组中有同名数字KEY的时候,使用array_merge()不会覆盖掉原来的值,而使用“+”合并数组则会把最先出现的值作为最终结果返回,而把后面的数 ...
- PHP7安装笔记
PHP7安装笔记 时间 -- :: 喵了个咪 原文 http://www.hdj.me/php7-install-note 主题 PHP # 安装mcrypt yum install -y php-m ...
- http status 汇总
http status 汇总 常见HTTP状态码 200 OK 301 Moved Permanently 302 Found 304 Not Modified 307 Temporary Redir ...
- 由浅入深了解Thrift之客户端连接池化
一.问题描述 在上一篇<由浅入深了解Thrift之服务模型和序列化机制>文章中,我们已经了解了thrift的基本架构和网络服务模型的优缺点.如今的互联网圈中,RPC服务化的思想如火如荼.我 ...
- ios下划线变量:为什么变量前要加下划线才有用?
先看一段代码. 复制代码 appdelegate.h @property (weak) IBOutlet NSMatrix *StockType; @property (weak) IBOutle ...
- (7)nehe教程1 创建一个OpenGL窗口:
不要用那个nehe ndk了 误人子弟! 转自: 一个窗口,代码可真多啊 http://www.yakergong.net/nehe/ 在这个教程里,我将教你在Windows环境中创建OpenGL程序 ...