http://172.20.6.3/Problem_Show.asp?id=1354

题意:求从起始点到终点走过的路程为x有多少种走法,不保证两点间只有一条路,刚走完一条路时不能原路返回,每条路长度为1。
 
把每条路更换为正反两条边,再造一条出到起点的边s造一条入为终点的边t,将每一条边作为邻接矩阵中的点,矩乘即可
注意题意告诉我们一条路中的正反两条边不能相连。
 
代码
 #include<cstdio>
#include<cstring>
#include<iostream>
const int maxn=;
const double eps=1e-;
const int modn=;
int n,m,d,s,t;
struct mat{
long long e[][];
mat(){ memset(e,,sizeof(e)); }
};mat a;
struct nod{
int y;
int f;
int rev;
int next;
}e[];
int tot=;
int head[]={};
mat Mul(mat x,mat y){
mat z;
for(int i=;i<=m*+;i++){
for(int j=;j<=m*+;j++){
for(int k=;k<=m*+;k++){
z.e[i][j]+=x.e[i][k]*y.e[k][j];
z.e[i][j]%=modn;
}
}
}
return z;
}
mat Pow(mat x,int k){
mat z;
for(int i=;i<=m*+;i++){
z.e[i][i]=;
}
while(k>){
if(k&){
z=Mul(z,x);
}
x=Mul(x,x);
k/=;
}
return z;
}
void init(int x,int y,int rev){
e[++tot].y=y;
e[tot].next=head[x];
e[tot].rev=rev;
head[x]=tot;
}
void dfs(int x,int v){
int y;
if(x==t){
a.e[v][*m+]=;
}
for(int i=head[x];i;i=e[i].next){
y=e[i].y;
if(v!=e[i].rev){
a.e[v][i]=;
}
if(!e[i].f){
e[i].f=;
dfs(y,i);
}
}
}
int main(){
scanf("%d%d%d%d%d",&n,&m,&d,&s,&t);
s+=,t+=;
int x,y;
for(int i=;i<=m;i++){
scanf("%d%d",&x,&y);
init(x+,y+,tot+);
init(y+,x+,tot);
}dfs(s,);
mat z=Pow(a,d+);
printf("%lld\n",z.e[][*m+]);
return ;
}

【bzoj1875】【JZYZOJ1354】[SDOI2009]HH去散步 矩阵快速幂 点边转换的更多相关文章

  1. bzoj1875 [SDOI2009]HH去散步 矩阵快速幂

    题目传送门 https://lydsy.com/JudgeOnline/problem.php?id=1875 题解 如果没有这个"不能立刻沿着刚刚走来的路走回",那么这个题就是一 ...

  2. 【BZOJ】1875: [SDOI2009]HH去散步 矩阵快速幂

    [题意]给定n个点m边的无向图,求A到B恰好经过t条边的路径数,路径须满足每条边都和前一条边不同.n<=20,m<=60,t<=2^30. [算法]矩阵快速幂 [题解]将图的邻接矩阵 ...

  3. bzoj1875 [SDOI2009]HH去散步——矩阵快速幂

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1875 有个限制是不能走回头路,比较麻烦: 所以把矩阵中的元素设成边的经过次数,单向边之间就好 ...

  4. [luogu2151 SDOI2009] HH去散步 (矩阵快速幂)

    传送门 题目描述 HH有个一成不变的习惯,喜欢饭后百步走.所谓百步走,就是散步,就是在一定的时间 内,走过一定的距离. 但是同时HH又是个喜欢变化的人,所以他不会立刻沿着刚刚走来的路走回. 又因为HH ...

  5. 【bzoj1875】[SDOI2009]HH去散步 矩阵乘法

    题目描述 一张N个点M条边的无向图,从A走到B,要求:每一次不能立刻沿着上一次的边的反方向返回.求方案数. 输入 第一行:五个整数N,M,t,A,B. N表示学校里的路口的个数 M表示学校里的路的条数 ...

  6. BZOJ 1875 HH去散步(矩阵快速幂)

    题意: 给定一张无向图,每条路的长度都是1,没有自环,可能有重边,给定起点与终点,求从起点走t步到达终点的方案数. 每一步走的时候要求不能走上一条刚刚走的路. 解析: 显然需要搞出个矩阵之后矩乘. 然 ...

  7. bzoj 1875: [SDOI2009]HH去散步 -- 矩阵乘法

    1875: [SDOI2009]HH去散步 Time Limit: 20 Sec  Memory Limit: 64 MB Description HH有个一成不变的习惯,喜欢饭后百步走.所谓百步走, ...

  8. 洛谷P2151 [SDOI2009] HH去散步 [矩阵加速]

    题目传送门 HH去散步 题目描述 HH有个一成不变的习惯,喜欢饭后百步走.所谓百步走,就是散步,就是在一定的时间 内,走过一定的距离. 但是同时HH又是个喜欢变化的人,所以他不会立刻沿着刚刚走来的路走 ...

  9. BZOJ1875 [SDOI2009]HH去散步 矩阵

    欢迎访问~原文出处——博客园-zhouzhendong 去博客园看该题解 题目传送门 - BZOJ1875 题意概括 在一个无向图(有重边无自环)中走,不能在经过连续经过某一条边2次. 现在走t步,问 ...

随机推荐

  1. .NET中的异常和异常处理

    .NET中的异常(Exception) .net中的中异常的父类是Exception,大多数异常一般继承自Exception. 可以通过编写一个继承自Exception的类的方式,自定义异常类! 异常 ...

  2. vue-cli使用说明

    一.安装npm install -g vue-cli 推荐使用国内镜像 先设置cnpm npm install -g cnpm --registry=https://registry.npm.taob ...

  3. LOW逼三人组(二)----选择排序算法

    选择排序思路: 算法程序: def cal_time(func): # 装饰器 ,用来检测算法所执行的时间 def wrapper(*args,**kwargs): t1=time.time() re ...

  4. Skipping 'Android SDK Tools, revision 24.0.2'; it depends on 'Android SDK Platform-tools, revision 20' which was not installed.

    前几天,同事问我eclipse android sdk怎么不能更新. 更新界面是显示(mirrors.neusoft.edu.cn:80),但是不能更新. 问题描述如下: URL not found: ...

  5. OSCP考试回顾

    技术背景 从2011年开始接触学习渗透测试,全职做过的职位有渗透测试,Python后端研发,DevOps,甲方安全打杂. 学习过程 首先考试报名,交钱.买了价值800美元的一个月lab,包含Pente ...

  6. 用C#实现对MSSqlServer数据库的增删改查---DAL层

    说明:本人完成的工作是对传感器--超声波物位计进行硬件集成,上位机通过串口接收传感器数据并将其存到数据库中:在DAL层实现对数据库的增删改查,其中包含两个数据表分别是WaterLevelSet表和Wa ...

  7. Class.this 和 this 的有什么不同

    转载:http://www.cnblogs.com/liwei45212/archive/2013/04/17/3026364.html 在阅读Java代码的時候 我们时会看到Class.this的使 ...

  8. ireport报表制作, 当一个字段显示的数据太多时(数据过长),则需要自动换行

    1.当一个字段显示的数据太长,一个表格放不下,则需要自动换行,选中要更改的表格(要显示动态内容的字段),设置属性Stretch with overflow 为钩选状态. 未勾选之前: 勾选之后: 2. ...

  9. C++大数据处理

    转:http://blog.csdn.net/v_july_v/article/details/7382693 作者:July出处:结构之法算法之道blog 前言 一般而言,标题含有“秒杀”,“99% ...

  10. 《自己动手写docker》之namespace部门实验

    动手写一遍,印象不一样! package main import ( "log" "os" "os/exec" "syscall& ...