题目链接

先离散化,假设有\(P\)个点

定义矩阵\(A_{ij}\)表示\(i\)到\(j\)只经过一条边的最短路,$${(A^{a+b}){ij}=\min{1\le k\le p} { (Aa)_{ik}+(Ab)_{kj} }}$$

\(A^{a+b}_{ij}\)表示\(i\)到\(j\)经过\((a+b)\)条边的最短路。

这不就是\(ddp\)里常用的广义矩阵乘法吗,直接上快速幂即可。

#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
int b[1010], n, m, s, t, cnt, A, B, C;
struct Matrix{
int a[220][220];
}M;
Matrix operator * (Matrix a, Matrix b){
Matrix c;
for(int i = 1; i <= cnt; ++i)
for(int j = 1; j <= cnt; ++j){
c.a[i][j] = 1 << 29;
for(int k = 1; k <= cnt; ++k)
c.a[i][j] = min(c.a[i][j], a.a[i][k] + b.a[k][j]);
}
return c;
}
int main(){
scanf("%d%d%d%d", &n, &m, &s, &t);
memset(M.a, 63, sizeof M.a);
for(int i = 1; i <= m; ++i){
scanf("%d%d%d", &C, &A, &B);
if(!b[A]) b[A] = ++cnt;
if(!b[B]) b[B] = ++cnt;
M.a[b[A]][b[B]] = M.a[b[B]][b[A]] = C;
}
Matrix now = M; --n;
while(n){
if(n & 1) now = now * M;
M = M * M; n >>= 1;
}
printf("%d\n", now.a[b[s]][b[t]]);
return 0;
}

【POJ3613 Cow Relays】(广义矩阵乘法)的更多相关文章

  1. [POJ3613] Cow Relays(Floyd+矩阵快速幂)

    解题报告 感觉这道题gyz大佬以前好像讲过一道差不多的?然鹅我这个蒟蒻发现矩阵快速幂已经全被我还给老师了...又恶补了一遍,真是恶臭啊. 题意 给定一个T(2 <= T <= 100)条边 ...

  2. POJ3613 Cow Relays(矩阵快速幂)

    题目大概要求从起点到终点恰好经过k条边的最短路. 离散数学告诉我们邻接矩阵的k次幂就能得出恰好经过k条路的信息,比如POJ2778. 这题也一样,矩阵的幂运算定义成min,而min满足结合律,所以可以 ...

  3. Codeforces 576D - Flights for Regular Customers(bitset 优化广义矩阵乘法)

    题面传送门 题意: 有一张 \(n\) 个点 \(m\) 条边的有向图,你初始在 \(1\) 号点,边上有边权 \(c_i\) 表示只有当你经过至少 \(c_i\) 条边的时候你才能经过第 \(i\) ...

  4. POJ3613 Cow Relays [矩阵乘法 floyd类似]

    Cow Relays Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 7335   Accepted: 2878 Descri ...

  5. 疯子的算法总结(九) 图论中的矩阵应用 Part 1+POJ3613 Cow Relays

    图的存储有邻接矩阵,那么他就具备一些矩阵的性质,设有一个图的demo[100][100];那么demo[M][N]就是M—>N的距离,若经过一次松弛操作demo[M][N]=demo[M][K] ...

  6. poj3613 Cow Relays【好题】【最短路】【快速幂】

    Cow Relays Time Limit: 1000MS   Memory Limit: 65536K Total Submissions:9207   Accepted: 3604 Descrip ...

  7. poj 3613 Cow Relays【矩阵快速幂+Floyd】

    !:自环也算一条路径 矩阵快速幂,把矩阵乘法的部分替换成Floyd(只用一个点扩张),这样每"乘"一次,就是经过增加一条边的最短路,用矩阵快速幂优化,然后因为边数是100级别的,所 ...

  8. poj 3613 Cow Relays(矩阵的图论意义)

    题解 用一个矩阵来表示一个图的边的存在性,即矩阵C[i,j]=1表示有一条从i到j的有向边C[i,j]=0表示没有从i到j的边.这个矩阵的k次方后C[i,j]就表示有多少条从i到j恰好经过k条边的路径 ...

  9. POJ 3631 Cow Relays Floyd+矩阵快速幂

    题目描述 For their physical fitness program, N (2 ≤ N ≤ 1,000,000) cows have decided to run a relay race ...

随机推荐

  1. 利用chocolate包管理工具安装helm

    在powershell中执行 1 安装choco包管理工具 Set-ExecutionPolicy Bypass -Scope Process -Force; iex ((New-Object Sys ...

  2. [Beta]第一次 Scrum Meeting

    [Beta]第一次 Scrum Meeting 写在前面 会议时间 会议时长 会议地点 2019/5/5 22:00 30min 大运村公寓6F寝室 附Github仓库:WEDO 例会照片 工作情况总 ...

  3. typescript - 1.环境搭建

    安装 1.安装node.js 安装typescript npm install -g typescript 3.编译 tsc helloworld.ts Typescript开发工具Vscode自动编 ...

  4. python2.7报错Non-ASCII character '\xe5' in file的解决方法

    在文件首行加#coding=utf-8,一定要在最顶行添加

  5. Oracle系列一 SQL语句基本概念和学习准备

    DML: Data Manipulation Language 数据操纵语言DDL:  Data Definition Language 数据定义语言DCL:  Data Control Langua ...

  6. centos 宝塔面版 运行 thinkjs

    centos 宝塔面版 运行 thinkjs 几点要注意的地方: 1.  https ssl 如图 2. thinkjs 运行子目录在/www如图配置: 3. 代理配置(展示查看配置) server ...

  7. MongoDB学习(附录一) 安装mongodb3.6时碰到的问题

    1.Installing MongoDB Compass...(this may take a few minutes)这一步,会停留很长时间,点击取消可能也取消不了. 安装mongdodb ,进度卡 ...

  8. 品优购商城项目(五)消息中间件 ActiveMQ

    消息中间件用于降低各个项目模块的耦合,适用于不需要等待返回消息才能进入下一个业务环节的模块,以及实时要求性不高的业务模块. 一.JMS JMS(Java Messaging Service)是Java ...

  9. 【Java】单点登录(SSO)

    单点登录介绍 ​ SSO英文全称Single Sign On,单点登录.SSO是在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统.它包括可以将这次主要的登录映射到其他应用中用于同一 ...

  10. Shenzhen Wanze Technology Co., Ltd.技术支持

    本网页为Shenzhen Wanze Technology Co., Ltd.团队的技术支持网址,如果在我们开发的游戏中遇到任何问题,欢迎联系我们! QQ:2535510006 邮箱:25355100 ...