link

题目大意

给你一个含有边权的无向图,问从$S$到$T$经过$N$条边的最小花费。

试题分析

我们可以很容易推导$dp$方程,$dp(k,i,j)$表示经过$k$条边从$i$到$j$的最小花费。则,$dp(k,i,j)=min(dp(k-1,i,p)+dp(1,p,j))$。

而$(i,p),(p,j),(i,j)$发现了什么,这不是矩阵吗,$dp(1,i,j)$为初始矩阵($1$次幂),$dp(2,i,j)$为$2$次幂,$dp(3,i,j)$为$3$次幂,所以只需要矩阵快速幂一下即可。

#include<iostream>
#include<cstring>
#include<cstdio>
#include<algorithm>
#define int long long
using namespace std;
inline int read(){
int f=,ans=;char c=getchar();
while(c<''||c>''){if(c=='-')f=-;c=getchar();}
while(c>=''&&c<=''){ans=ans*+c-'';c=getchar();}
return f*ans;
}
const int MAXN=;
struct matrix{
int st[MAXN][MAXN];
}a,F,ans;
struct node{
int u,v,w;
}x[MAXN];
int Map[],n,k,m,S,T,cnt;
matrix mul(matrix s1,matrix s2){
matrix s3;
memset(s3.st,/,sizeof(s3.st));
for(int i=;i<=n;i++)
for(int j=;j<=n;j++)
for(int p=;p<=n;p++){
s3.st[i][p]=min(s3.st[i][p],s1.st[i][j]+s2.st[j][p]);
}
return s3;
}
matrix qpow(int b){
if(b==) return a;
ans=a;
while(b){
if(b&) ans=mul(ans,a);
a=mul(a,a);b>>=;
}return ans;
}
signed main(){
k=read(),m=read(),S=read(),T=read();
memset(a.st,/,sizeof(a.st));
for(int i=;i<=m;i++){
int w=read(),u=read(),v=read();
if(Map[u]==) Map[u]=++cnt;
if(Map[v]==) Map[v]=++cnt;
u=Map[u],v=Map[v];
x[i].w=w,x[i].u=u,x[i].v=v;
a.st[u][v]=a.st[v][u]=min(a.st[u][v],w);
}
n=cnt;
F=qpow(k-);
printf("%lld",F.st[Map[S]][Map[T]]);
}
/*
2 3 1 3
1 1 2
1 2 3
1 1 3
*/

[POJ3613] Cow Relays的更多相关文章

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

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

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

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

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

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

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

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

  5. 【POJ3613 Cow Relays】(广义矩阵乘法)

    题目链接 先离散化,假设有\(P\)个点 定义矩阵\(A_{ij}\)表示\(i\)到\(j\)只经过一条边的最短路,\[{(A^{a+b})_{ij}=\min_{1\le k\le p} \{ ( ...

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

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

  7. 「POJ3613」Cow Relays

    「POJ3613」Cow Relays 传送门 就一个思想:\(N\) 遍 \(\text{Floyd}\) 求出经过 \(N\) 个点的最短路 看一眼数据范围,想到离散化+矩阵快速幂 代码: #in ...

  8. poj3613:Cow Relays(倍增优化+矩阵乘法floyd+快速幂)

    Cow Relays Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 7825   Accepted: 3068 Descri ...

  9. poj 3613 Cow Relays

    Cow Relays Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 5411   Accepted: 2153 Descri ...

随机推荐

  1. python3 selenium实现自动登陆网页

    一.  安装python3与pycharm python安装参考链接:https://www.cnblogs.com/hepeilinnow/p/9727922.html pycharm最好安装专业版 ...

  2. AnyProxy对搜狐汽车app抓包

    关于AnyProxy 详细文档链接 http://anyproxy.io/cn/ anyproxy流程图 简要描述 当http请求经过代理服务器时,具体处理过程是: 收集请求所有请求参数,包括meth ...

  3. Unity标准材质官方教程合集

  4. Centos7.2部署saltstack

    原文发表于cu:2016-06-23 参考文档: Saltstack安装文档:https://repo.saltstack.com/#rhel saltstack的安装与简单配置,应用. 一.环境 S ...

  5. Your funds transfer has been delayed

    Hello from Amazon. Your funds transfer in the amount of 9,422.88 USD has been delayed because the cr ...

  6. 【java】中缀表达式转后缀表达式 java实现

    算法: 中缀表达式转后缀表达式的方法:1.遇到操作数:直接输出(添加到后缀表达式中)2.栈为空时,遇到运算符,直接入栈3.遇到左括号:将其入栈4.遇到右括号:执行出栈操作,并将出栈的元素输出,直到弹出 ...

  7. 自我介绍for软件工程课程

    石家庄铁道大学学生,正在学习软件工程课程. 对于软件工程课程,没什么太大的希望.度了一下,发现软件工程课程近年来比较脱节,这次用新课本不知道效果怎么样.嗯,等课本到手看看再说吧. 自己的目标:我希望能 ...

  8. PHP 函数总结

    感觉对函数了解的不够深,从头到尾梳理一遍(更新中....) 1,class_exists(),interface_exists(),method_exists(),get_class(),get_pa ...

  9. P4 Runtime和p4 info

    p4runtime P4 Runtime是一套基于Protobuf以及gRPC框架上的协议,通过P4runtime,SDN控制器可以控制能够支援p4的设备. p4runtime当前由p4 API wo ...

  10. ubuntu关闭系统自动检测错误

    sudo gedit /etc/default/apport 将enabled=1 改成 enabled=0