【POJ3613 Cow Relays】(广义矩阵乘法)
题目链接
先离散化,假设有\(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】(广义矩阵乘法)的更多相关文章
- [POJ3613] Cow Relays(Floyd+矩阵快速幂)
解题报告 感觉这道题gyz大佬以前好像讲过一道差不多的?然鹅我这个蒟蒻发现矩阵快速幂已经全被我还给老师了...又恶补了一遍,真是恶臭啊. 题意 给定一个T(2 <= T <= 100)条边 ...
- POJ3613 Cow Relays(矩阵快速幂)
题目大概要求从起点到终点恰好经过k条边的最短路. 离散数学告诉我们邻接矩阵的k次幂就能得出恰好经过k条路的信息,比如POJ2778. 这题也一样,矩阵的幂运算定义成min,而min满足结合律,所以可以 ...
- Codeforces 576D - Flights for Regular Customers(bitset 优化广义矩阵乘法)
题面传送门 题意: 有一张 \(n\) 个点 \(m\) 条边的有向图,你初始在 \(1\) 号点,边上有边权 \(c_i\) 表示只有当你经过至少 \(c_i\) 条边的时候你才能经过第 \(i\) ...
- POJ3613 Cow Relays [矩阵乘法 floyd类似]
Cow Relays Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 7335 Accepted: 2878 Descri ...
- 疯子的算法总结(九) 图论中的矩阵应用 Part 1+POJ3613 Cow Relays
图的存储有邻接矩阵,那么他就具备一些矩阵的性质,设有一个图的demo[100][100];那么demo[M][N]就是M—>N的距离,若经过一次松弛操作demo[M][N]=demo[M][K] ...
- poj3613 Cow Relays【好题】【最短路】【快速幂】
Cow Relays Time Limit: 1000MS Memory Limit: 65536K Total Submissions:9207 Accepted: 3604 Descrip ...
- poj 3613 Cow Relays【矩阵快速幂+Floyd】
!:自环也算一条路径 矩阵快速幂,把矩阵乘法的部分替换成Floyd(只用一个点扩张),这样每"乘"一次,就是经过增加一条边的最短路,用矩阵快速幂优化,然后因为边数是100级别的,所 ...
- poj 3613 Cow Relays(矩阵的图论意义)
题解 用一个矩阵来表示一个图的边的存在性,即矩阵C[i,j]=1表示有一条从i到j的有向边C[i,j]=0表示没有从i到j的边.这个矩阵的k次方后C[i,j]就表示有多少条从i到j恰好经过k条边的路径 ...
- POJ 3631 Cow Relays Floyd+矩阵快速幂
题目描述 For their physical fitness program, N (2 ≤ N ≤ 1,000,000) cows have decided to run a relay race ...
随机推荐
- OpenFOAM——设置自定义非均匀场区域
在使用OpenFOAM进行计算的时候,我们需要对计算域设置非均匀场,比如最典型的溃坝算例,在开始计算以前,我们需要首先设定某一区域的水的体积分数为1,就是下面这样的: 有可能我们在计算传热问题的时候, ...
- 剑指offer:数组中的逆序对
题目描述: 在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对.输入一个数组,求出这个数组中的逆序对的总数P.并将P对1000000007取模的结果输出. 即输出P%100 ...
- ArcGIS 要素类整体平移工具-arcgis/arcpy/模型构建器案例实习教程
ArcGIS 要素类整体平移工具-arcgis/arcpy/模型构建器案例实习教程 联系方式:谢老师,135-4855_4328,xiexiaokui#qq.com 目的:对整个要素类,按指定偏移距离 ...
- RSA签名,加解密处理核心文件
import java.io.ByteArrayOutputStream; import java.io.UnsupportedEncodingException; import java.secur ...
- RSA 签名、验证、加密、解密帮助类
import java.io.IOException; import java.security.InvalidKeyException; import java.security.KeyFactor ...
- [ERROR] Failed to execute goal org.apache.maven.plugins:maven-install-plugin:2.4: install (default-install) on project authorizationManagement-service: Failed to install metadata com.dmsdbj.itoo:autho
今天在打包时遇到这个问题: [ERROR] Failed to execute goal org.apache.maven.plugins:maven-install-plugin:2.4: inst ...
- WIN7 浏览器 收藏夹栏字体太小
在“窗口颜色和外观”-项目-“消息框”,把字体大小调大. "标题按钮" 大小 21.
- Linux配置AndroidSDK&Jenkins远程部署
最近将公司的项目部署了Jenkins持续集成,遇到了几个麻烦的点,其中之一就是将Android SDK进行配置在远程服务器(总结下来还是自己对Linux命令还不够熟悉),特此记录. 系统: Ubunt ...
- python:找出两个列表中相同和不同的元素(使用推导式)
#接口返回值 list1 = ['张三', '李四', '王五', '老二'] #数据库返回值 list2 = ['张三', '李四', '老二', '王七'] a = [x for x in lis ...
- (转)面试前必知Redis面试题—缓存雪崩+穿透+缓存与数据库双写一致问题
背景:redis问题在面试过程中经常被问到,对于常见问题一定不能放过. 面试前必知Redis面试题—缓存雪崩+穿透+缓存与数据库双写一致问题 一.缓存雪崩 1.1什么是缓存雪崩? 如果缓存数据设置的过 ...