【BZOJ5056】OI游戏 最短路+有向图生成树计数
【BZOJ5056】OI游戏
Description
Input
Output
Sample Input
2
01
10
Input2
4
0123
1012
2101
3210
Sample Output
1
Output2
6
题解:一开始看错题,以为是任意两点间的最短路都相同。。。
先求出1号点到所有点的最短路径图(如果1到所有点的最短路径都可能经过某条边,则这条边在最短路径图上)(注意这个图是有向的)(可以用SPFA或Dij,不过本人懒,用的Floyd)。然后我们只需要求出这个图的生成树个数了。由于要求的是外向树,所以用度数矩阵-邻接矩阵,再用辗转相除得到行列式的值即可。具体做法可以参见天赋那道题。
#include <cstdio>
#include <cstring>
#include <iostream>
using namespace std;
typedef long long ll;
const ll P=1000000007;
int n;
char str[60];
int dis[60][60],map[60][60];
ll v[60][60],A,B;
ll ans;
int main()
{
scanf("%d",&n);
int i,j,k;
for(i=1;i<=n;i++)
{
scanf("%s",str+1);
for(j=1;j<=n;j++) dis[i][j]=str[j]-'0',map[i][j]=dis[i][j]=(!dis[i][j]&&i!=j)?(0x3f3f3f3f):dis[i][j];
}
for(k=1;k<=n;k++) for(i=1;i<=n;i++) for(j=1;j<=n;j++) dis[i][j]=min(dis[i][j],dis[i][k]+dis[k][j]);
for(i=1;i<=n;i++) for(j=1;j<=n;j++) if(i!=j)
{
if(dis[1][i]+map[i][j]==dis[1][j]) v[j][j]++,v[i][j]--;
}
for(i=1;i<=n;i++) for(j=1;j<=n;j++) v[i][j]=(v[i][j]+P)%P;
ans=1;
for(i=2;i<=n;i++)
{
for(j=i;j<=n;j++) if(v[j][i]) break;
if(j!=i) for(ans=P-ans,k=i;k<=n;k++) swap(v[i][k],v[j][k]);
for(j=i+1;j<=n;j++)
{
A=v[i][i],B=v[j][i];
while(B)
{
ll tmp=A/B,temp=A; A=B,B=temp%B;
for(ans=P-ans,k=i;k<=n;k++) v[i][k]=(v[i][k]-v[j][k]*tmp%P+P)%P,swap(v[i][k],v[j][k]);
}
}
ans=ans*v[i][i]%P;
}
printf("%lld",ans);
return 0;
}
【BZOJ5056】OI游戏 最短路+有向图生成树计数的更多相关文章
- BZOJ5056 OI游戏 最短路+组合数学
链接接接接接! 正解:最短路+小学奥数 乘法原理 解题报告: 首先读懂题意(,,,我觉得我吃枣死于语文太差读不懂题目QAQ 大意就是港,要求从第一个点到其他各点的长度都是最短的方案有多少个(ummm, ...
- 【bzoj5056】OI游戏 最短路+矩阵树定理
题目描述 给出一张无向图,求满足 0号点到所有点的路径长等于原图中它们之间最短路 的生成树的个数. 输入 第一行一个整数N,代表原图结点. 接下来N行,每行N个字符,描绘了一个邻接矩阵.邻接矩阵中, ...
- 【BZOJ4894】天赋 有向图生成树计数
[BZOJ4894]天赋 Description 小明有许多潜在的天赋,他希望学习这些天赋来变得更强.正如许多游戏中一样,小明也有n种潜在的天赋,但有一些天赋必须是要有前置天赋才能够学习得到的.也就是 ...
- BZOJ5056 OI游戏[最短路树]
有生以来做过的bzoj比A+B还简单的最水的题.(确信) 不解释. UPD:据说这题正解应当是矩阵树定理?但是这个不是用来最小生成树计数的么?有生之年会补的. #include<iostream ...
- @总结 - 7@ 生成树计数 —— matrix - tree 定理(矩阵树定理)与 prüfer 序列
目录 @0 - 参考资料@ @0.5 - 你所需要了解的线性代数知识@ @1 - 矩阵树定理主体@ @证明 part - 1@ @证明 part - 2@ @证明 part - 3@ @证明 part ...
- bzoj 5056: OI游戏 最短路树的计数
OI游戏 Time Limit: 1 Sec Memory Limit: 64 MBSubmit: 196 Solved: 159[Submit][Status][Discuss] Descrip ...
- bzoj 5056: OI游戏
5056: OI游戏 Time Limit: 1 Sec Memory Limit: 64 MBSubmit: 204 Solved: 162[Submit][Status][Discuss] D ...
- kuangbin带你飞 生成树专题 : 次小生成树; 最小树形图;生成树计数
第一个部分 前4题 次小生成树 算法:首先如果生成了最小生成树,那么这些树上的所有的边都进行标记.标记为树边. 接下来进行枚举,枚举任意一条不在MST上的边,如果加入这条边,那么肯定会在这棵树上形成一 ...
- 生成树计数 Matrix-Tree 定理 学习笔记
一直都知道要用Matrix-Tree定理来解决生成树计数问题,但是拖到今天才来学.博主数学不好也只能跟着各位大佬博客学一下它的应用以及会做题,证明实在是不会. 推荐博客: https://www.cn ...
随机推荐
- 使用Visual Studio的动态连接库创建通用数据库连接对话框
1.在VS(此处文件夹文件以vs2010为例)安装文件夹下("%Visual Studio安装文件夹%/Common10/IDE/Microsoft.Data.ConnectionUI.Di ...
- 微信小程序 - 上传图片纯前端(多张、单张)
演示如下 可能有些命名不太规范,到时改一下即可 点击从github拉取:图片上传示例
- Androidproject师进阶之路 :《Android开发进阶:从小工到专家》上市啦!
封面 文件夹1 文件夹2 - 当当购买链接 - 京东购买链接 为什么写这本书 写这本书的念头由来已久了. 或许是从我打算写<Android源代码设计模式解析与实战>那时起就萌生了这个念头, ...
- 在ASP.NET MVC中支持 HttpHandler
写HttpHandler与ASP.NET WebForm基本没有什么不同.只是部署的时候需要注意,只在Web.config中注册还不行,需要在Global.asax.cs添加一条ignore规则: p ...
- activiti designer下载地址
http://www.activiti.org/designer/update/ http://www.activiti.org/designer/archived/ 这个地址貌似不能用了 ...
- SVN Client API的.net 接口 SharpSvn介紹 Checkout操作实例
Subversion是一個文件版本管理工具, 廣泛的被大家採用來作為源代碼版本管理. 已有的工具不管是其自帶的命令行工具還是Windows UI的tortoiseSVN等還是很方便實用的, 但是如果想 ...
- Java中几种常见的NPE问题
1.Map下的NPE 直接上代码: Map类集合K/V能不能存储null值的情况,如下表格: 2.foreach遍历集合删除元素 在遍历集合时对元素进行add/remove操作要使用Iterator, ...
- PHP输出xls文件
PHP输出xls文件 标签: phpexcelxmlcsvborderheader 2008-11-17 09:33 2611人阅读 评论(0) 收藏 举报 分类: WebDev(9) 版权声明: ...
- springmvc中action跳转
return "redirect:/activity/listactivity.htm";
- 【原创】菜鸟版Android 笔记1- Android架构和Application
Android架构 图1 Android架构自上而下名称为应用层.应用框架层.运行库和Adroid虚拟机层. Linux内核层. 1. 应用层 应用层像一座大厦里面的砖瓦.我们所做的开发基本上都在应用 ...