2017 Wuhan University Programming Contest (Online Round) Lost in WHU 矩阵快速幂 一个无向图,求从1出发到达n最多经过T条边的方法数,边可以重复经过,到达n之后不可以再离开。
/**
题目:Lost in WHU
链接:https://oj.ejq.me/problem/26
题意:一个无向图,求从1出发到达n最多经过T条边的方法数,边可以重复经过,到达n之后不可以再离开。
思路:一个邻接矩阵(01矩阵)自身的T次方那么,a[i][j]的结果表示i到j经过T条边的方法数。(通过矩阵相乘理解
c.m[i][j] = (c.m[i][j]+a.m[i][k]*b.m[k][j]%mod)%mod; 表示i到j,通过i先到k,然后k到j;)
那么求a[1][n]的T步就是T个a矩阵相乘;
由于本题是T以内的方法数。那么通过对矩阵相乘的理解,可以想到增加一个n到达n的边。这时候保证T个矩阵相乘的过程中,当前已经获得的矩阵c
乘以一个a矩阵后,可以保证原先的c[1][n]方法数累加进去。即:c.m[1][n]*a.m[n][n];
然后用快速幂加速矩阵相乘即可。
*/
#include<bits/stdc++.h>
typedef long long ll;
using namespace std;
const int maxn = 1e2+;
const int mod = 1e9+;
int n, m, k;
struct mat
{
ll m[maxn][maxn];
mat operator*(const mat &b){
mat c, a = *this;
memset(c.m, , sizeof c.m);
for(int i = ; i <= n; i++){
for(int j = ; j <= n; j++){
for(int k = ; k <= n; k++){
c.m[i][j] = (c.m[i][j]+a.m[i][k]*b.m[k][j]%mod)%mod;
}
}
}
return c;
}
mat operator^(int y){
mat x = *this;
mat p;
memset(p.m, , sizeof p.m);
for(int i = ; i <= n; i++){
p.m[i][i] = ;
}
while(y>){
if(y&) p = p*x;
x = x*x;
y >>= ;
}
return p;
}
} x;
/*
ll solve(int y)
{
mat p;
memset(p.m, 0, sizeof p.m);
for(int i = 1; i <= n; i++){
p.m[i][i] = 1;
}
while(y>0){
if(y&1) p = p*x;
x = x*x;
y >>= 1;
}
return p.m[1][n];
}*/
int main()
{
while(scanf("%d%d",&n,&m)!=EOF)
{
int u, v;
memset(x.m, , sizeof x.m);
for(int i = ; i < m; i++){
scanf("%d%d",&u,&v);
x.m[u][v] = x.m[v][u] = ;
}
for(int i = ; i < n; i++) x.m[n][i] = ;///到达终点后不可以再出去,除非去自身。
x.m[n][n] = ;
scanf("%d",&k);
//printf("%lld\n",solve(k));
mat ans = x^k;
printf("%lld\n",ans.m[][n]);
}
return ;
}
2017 Wuhan University Programming Contest (Online Round) Lost in WHU 矩阵快速幂 一个无向图,求从1出发到达n最多经过T条边的方法数,边可以重复经过,到达n之后不可以再离开。的更多相关文章
- 2017 Wuhan University Programming Contest (Online Round) D. Events,线段树区间更新+最值查询!
D. Events 线段树区间更新查询区间历史最小值,看似很简单的题意写了两天才写出来. 题意:n个数,Q次操作,每次操作对一个区间[l,r]的数同时加上C,然后输出这段区间的历史最小值. 思路:在线 ...
- 2017 Wuhan University Programming Contest (Online Round) C. Divide by Six 分析+模拟
/** 题目:C. Divide by Six 链接:https://oj.ejq.me/problem/24 题意:给定一个数,这个数位数达到1e5,可能存在前导0.问为了使这个数是6的倍数,且没有 ...
- 2017 Wuhan University Programming Contest (Online Round) B Color 树形dp求染色方法数
/** 题目:Color 链接:https://oj.ejq.me/problem/23 题意:给定一颗树,将树上的点最多染成m种颜色,有些节点不可以染成某些颜色.相邻节点颜色不同.求染色方法数. 思 ...
- Educational Codeforces Round 60 D dp + 矩阵快速幂
https://codeforces.com/contest/1117/problem/D 题意 有n个特殊宝石(n<=1e18),每个特殊宝石可以分解成m个普通宝石(m<=100),问组 ...
- Educational Codeforces Round 14E. Xor-sequences(矩阵快速幂)
传送门 题意 给定序列,从序列中选择k(1≤k≤1e18)个数(可以重复选择),使得得到的排列满足\(x_i与x_{i+1}\)异或的二进制表示中1的个数是3的倍数.问长度为k的满足条件的序列有多少种 ...
- 2017 ACM-ICPC 亚洲区(西安赛区)网络赛 Coin 矩阵快速幂
Bob has a not even coin, every time he tosses the coin, the probability that the coin's front face u ...
- zoj 4020 The 18th Zhejiang University Programming Contest Sponsored by TuSimple - G Traffic Light(广搜)
题目链接:The 18th Zhejiang University Programming Contest Sponsored by TuSimple - G Traffic Light 题解: 题意 ...
- hdu 5607 BestCoder Round #68 (矩阵快速幂)
graph Accepts: 9 Submissions: 61 Time Limit: 8000/4000 MS (Java/Others) Memory Limit: 65536/65536 ...
- 【UOJ#340】【清华集训2017】小 Y 和恐怖的奴隶主(矩阵快速幂,动态规划)
[UOJ#340][清华集训2017]小 Y 和恐怖的奴隶主(矩阵快速幂,动态规划) 题面 UOJ 洛谷 题解 考虑如何暴力\(dp\). 设\(f[i][a][b][c]\)表示当前到了第\(i\) ...
随机推荐
- MyBasic架构
MyBasic架构图 2,架构图解析 (1) (2) (3)
- ListView(下)自定义适配器
(一) 1.效果图 2.activity_main.xml <?xml version="1.0" encoding="utf-8"?> <L ...
- [Bug]CS0016: 未能写入输出文件“c:\Windows\Microsoft.NET\Framework\v4.0.30319\Temp
win7中安装asp.net的问题 编译器错误信息: CS0016: 未能写入输出文件问题解决办法 编译错误 说明: 在编译向该请求提供服务所需资源的过程中出现错误.请检查下列特定错误详细信息并适当地 ...
- Telnet技术白皮书
转:http://www.cnpaf.net/Class/Telnet/200705/19978.html Telnet的应用不仅方便了我们进行远程登录,也给hacker们提供了又一种入侵手段和后门, ...
- vscode 使用笔记
https://code.visualstudio.com/docs/setup/setup-overview#_proxy-server-support 如果使用代理上网时,需要配置: 在 se ...
- JavaScript字符串api简单说明
1.可返回指定位置的字符 stringObject.charAt(index); 2.返回的是位于指定位置的字符的编码 stringObject.charCodeAt(index); 3.用于连接两个 ...
- activiti-explorer 流程中文乱码问题
1.activiti-cfg.xml的修改,添加activityFontName和labelFontName属性 <bean id="processEngineConfiguratio ...
- python 输出所有大小写字母, range()以及列表切片
所以在写的时候,只要把它们的ASCII列出,并转化成字符型chr 即可. print [chr(i) for i in range(65,91)]#所有大写字母 print [chr(i) for i ...
- Spark集群数据处理速度慢(数据本地化问题)
SparkStreaming拉取Kafka中数据,处理后入库.整个流程速度很慢,除去代码中可优化的部分,也在spark集群中找原因. 发现: 集群在处理数据时存在移动数据与移动计算的区别,也有些其他叫 ...
- Solr json,xml等文件数据导入(添加索引)linux下操作
使用solr-5.3.1\example\exampledocs下的post.jar来完成数据导入 1.将想要导入的文件放在solr-5.3.1\example\exampledocs中,如aaa.x ...