本题就是求两点间只经过n条边的最短路径,定义广义的矩阵乘法,就是把普通的矩阵乘法从求和改成了取最小值,把内部相乘改成了相加。

代码包含三个内容:广义矩阵乘法,矩阵快速幂,离散化;

 1 #include<bits/stdc++.h>
2 using namespace std;
3 const int INF=0x3f3f3f3f;
4 const int N=120;
5 int Hash[1000005],cnt=0;//用于离散化
6 struct matrix{
7 int m[N][N];
8 }ans,a;
9
10 matrix operator*(const matrix& a,const matrix& b){//定义广义矩阵乘法
11 matrix c;
12 memset(c.m,INF,sizeof(c.m));
13 for(int i=1;i<=cnt;i++)
14 for(int j=1;j<=cnt;j++)
15 for(int k=1;k<=cnt;k++)
16 c.m[i][j]=min(c.m[i][j],a.m[i][k]+b.m[k][j]);
17 return c;
18 }
19
20 matrix pow_matrix(matrix a,int n){
21 ans=a;
22 n--;//矩阵初值ans=M
23 while(n){
24 if(n&1) ans=ans*a;
25 a=a*a;
26 n>>=1;
27 }
28 return ans;
29 }
30
31 int main(){
32 int n,t,s,e;
33 scanf("%d%d%d%d",&n,&t,&s,&e);
34 memset(a.m,INF,sizeof(a.m));
35 while(t--){
36 int u,v,w;
37 scanf("%d%d%d",&w,&u,&v);
38 if(!Hash[u]) Hash[u]=++cnt;
39 if(!Hash[v]) Hash[v]=++cnt;//对点离散化
40 a.m[Hash[u]][Hash[v]]=a.m[Hash[v]][Hash[u]]=w;//邻接矩阵存图思想
41 }
42 ans=pow_matrix(a,n);
43 printf("%d",ans.m[Hash[s]][Hash[e]]);
44 return 0;
45 }

洛谷P2886 [USACO07NOV]Cow Relays G (矩阵乘法与路径问题)的更多相关文章

  1. 2021.11.03 P2886 [USACO07NOV]Cow Relays G(矩阵+floyed)

    2021.11.03 P2886 [USACO07NOV]Cow Relays G(矩阵+floyed) [P2886 USACO07NOV]Cow Relays G - 洛谷 | 计算机科学教育新生 ...

  2. 洛谷P2886 [USACO07NOV]牛继电器Cow Relays

    题意很简单,给一张图,把基本的求起点到终点最短路改成求经过k条边的最短路. 求最短路常用的算法是dijkstra,SPFA,还有floyd. 考虑floyd的过程: c[i][j]=min(c[i][ ...

  3. 【图论】USACO07NOV Cow Relays G

    题目大意 洛谷链接 给定一张\(T\)条边的无向连通图,求从\(S\)到\(E\)经过\(N\)条边的最短路长度. 输入格式 第一行四个正整数\(N,T,S,E\),意义如题面所示. 接下来\(T\) ...

  4. 洛谷 P2886 [USACO07NOV]牛继电器Cow Relays

    题面 解题思路 ## floyd+矩阵快速幂,跟GhostCai爷打赌用不用离散化,最后完败..GhostCai真是tql ! 有个巧妙的方法就是将节点重新编号,因为与节点无关. 代码 #includ ...

  5. USACO07NOV Cow Relays G 题解

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

  6. [USACO07NOV]Cow Relays G

    题目大意 给出一张无向连通图(点数小于1000),求S到E经过k条边的最短路. 算法 这是之前国庆模拟赛的题 因为懒 所以就只挑一些题写博客 在考场上写了个dp 然后水到了50分 出考场和神仙们一问才 ...

  7. 洛谷P3193 [HNOI2008]GT考试(dp 矩阵乘法)

    题意 题目链接 Sol 设\(f[i][j]\)表示枚举到位置串的第i位,当前与未知串的第j位匹配,那么我们只要保证在转移的时候永远不会匹配即可 预处理出已知串的每个位置加上某个字符后能转移到的位置, ...

  8. 并不对劲的[USACO07NOV,洛谷p2886]Cow Relays

    题意就是给一张无向有边权的图.起点.终点,求起点到终点经过n条边的最短路.n<=10^6,点的编号<=10^3,边数<=10^2. 这个边数让人不由自主地想到了floyd,然后发现f ...

  9. 不失一般性和快捷性地判定决策单调(洛谷P1912 [NOI2009]诗人小G)(动态规划,决策单调性,单调队列)

    洛谷题目传送门 闲话 看完洛谷larryzhong巨佬的题解,蒟蒻一脸懵逼 如果哪年NOI(放心我这样的蒟蒻是去不了的)又来个决策单调性优化DP,那蒟蒻是不是会看都看不出来直接爆\(0\)?! 还是要 ...

随机推荐

  1. 第十五天python3 文件IO(一)

    一.文件打开 open(path,flag[,encoding][,errors]) 参数说明: path:要打开文件的路径 flag:打开方式( r:以只读的方式打开文件,文件的描述符放在文件开头 ...

  2. Matplotlib(基本用法)

    Matplotlib 是数据分析绘图的常见模块,可以算是 2D-绘图(Python)领域使用最广泛的套件,可以将数据图形化,并且提供多样化的输出格式,利于数据的显示并分析. 接下来展示的是Matplo ...

  3. Rust 从入门到精通01-简介

    1.rust 从哪里来 Rust语言在2006年作为 Mozilla 员工 Graydon Hoare 的私人项目出现,而 Mozilla 于 2009 年开始赞助这个项目.第一个有版本号的 Rust ...

  4. Str 真题解(置换)

    目录 题面 置换 这里没有群论 置换 置换的乘法(复合) 置换乘法的单位元 置换乘法的结合律 置换快速幂 置换求乘法逆 真题解 一种可能的代码实现 关于循环节做法 题面 对于字符串 \(s\) 定义一 ...

  5. java-注释、API之字符串(String)

    /** * 文档注释只定义在三个地方 : 类.常量.方法上 * 在类上定义文档注释用来说这个类设计及其解决问题等相关描述信息 * @author 作者 * @version  1.0 21/08/17 ...

  6. java学习第一天.day06

    方法 方法的优点 1. 使程序变得更简短而清晰. 2. 有利于程序维护. 3. 可以提高程序开发的效率. 4. 提高了代码的重用性. static的作用 static在方法中如果没有添加就只能用对象调 ...

  7. Spring Boot部署方法

    Spring Boot部署方法     网上搜到的部署方法无非是打成jar包,然后shell执行nohup java调用jar命令,或者是打成war包然后部署到tomcat或者jetty容器上面. S ...

  8. kubernetes网络排错思想

    Overview 本文将引入一个思路:"在Kubernetes集群发生网络异常时如何排查".文章将引入Kubernetes 集群中网络排查的思路,包含网络异常模型,常用工具,并且提 ...

  9. RunCat 怎么白嫖付费图标?这篇文章告诉你!

    RunCat 怎么白嫖付费图标?这篇文章告诉你! 什么是RunCat 为什么要破解RunCat 开始破解 所以可以看出第一个文件就是我们运行图标选项的数据,而stocks.json的就是图标商店的数据 ...

  10. JOIOI王国 - 二分+贪心

    题面 题解 通过一句经典的话"最大值的最小值" 我判断它是二分题, 不难发现,整个图形中两个省的分界线是一条单调不递减或单调不递增的折线. 而且,越到后来它的最大值只会越来越大,最 ...