[POJ3613] Cow Relays
题目大意
给你一个含有边权的无向图,问从$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的更多相关文章
- POJ3613 Cow Relays [矩阵乘法 floyd类似]
Cow Relays Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 7335 Accepted: 2878 Descri ...
- poj3613 Cow Relays【好题】【最短路】【快速幂】
Cow Relays Time Limit: 1000MS Memory Limit: 65536K Total Submissions:9207 Accepted: 3604 Descrip ...
- 疯子的算法总结(九) 图论中的矩阵应用 Part 1+POJ3613 Cow Relays
图的存储有邻接矩阵,那么他就具备一些矩阵的性质,设有一个图的demo[100][100];那么demo[M][N]就是M—>N的距离,若经过一次松弛操作demo[M][N]=demo[M][K] ...
- POJ3613 Cow Relays(矩阵快速幂)
题目大概要求从起点到终点恰好经过k条边的最短路. 离散数学告诉我们邻接矩阵的k次幂就能得出恰好经过k条路的信息,比如POJ2778. 这题也一样,矩阵的幂运算定义成min,而min满足结合律,所以可以 ...
- 【POJ3613 Cow Relays】(广义矩阵乘法)
题目链接 先离散化,假设有\(P\)个点 定义矩阵\(A_{ij}\)表示\(i\)到\(j\)只经过一条边的最短路,\[{(A^{a+b})_{ij}=\min_{1\le k\le p} \{ ( ...
- [POJ3613] Cow Relays(Floyd+矩阵快速幂)
解题报告 感觉这道题gyz大佬以前好像讲过一道差不多的?然鹅我这个蒟蒻发现矩阵快速幂已经全被我还给老师了...又恶补了一遍,真是恶臭啊. 题意 给定一个T(2 <= T <= 100)条边 ...
- 「POJ3613」Cow Relays
「POJ3613」Cow Relays 传送门 就一个思想:\(N\) 遍 \(\text{Floyd}\) 求出经过 \(N\) 个点的最短路 看一眼数据范围,想到离散化+矩阵快速幂 代码: #in ...
- poj3613:Cow Relays(倍增优化+矩阵乘法floyd+快速幂)
Cow Relays Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 7825 Accepted: 3068 Descri ...
- poj 3613 Cow Relays
Cow Relays Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 5411 Accepted: 2153 Descri ...
随机推荐
- 同一个电脑配置两个Git问题
拿到公司电脑后,正常配置gitlab,以及设置邮箱等等,可以使用公司邮箱,以及一系列设置 git config --global user.name "userName" git ...
- 纯CSS3实现旋转木马
test.html: <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> ...
- html的背景样式图片
背景图片 如果背景图片小于当前的div的情况下 默认的是将平铺充满元素 background-image 设置背景图片. background-repeat 设置是否及如何重复背景图片. repeat ...
- Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift
1. 摘要 训练深层的神经网络非常困难,因为在训练的过程中,随着前面层数参数的改变,每层输入的分布也会随之改变.这需要我们设置较小的学习率并且谨慎地对参数进行初始化,因此训练过程比较缓慢. 作者将这种 ...
- php json 转换
在PHP语言中使用JSON 作者: 阮一峰 日期: 2011年1月14日 目前,JSON已经成为最流行的数据交换格式之一,各大网站的API几乎都支持它. 我写过一篇<数据类型和JSON格式& ...
- USACO 2.3.3 Zero Sum 和为零(深搜枚举)
Description 请考虑一个由1到N(N=3, 4, 5 ... 9)的数字组成的递增数列:1 2 3 ... N. 现在请在数列中插入“+”表示加,或者“-”表示减,抑或是“ ”表示空白,来将 ...
- Beta发布——视频博客
1.视频链接 视频上传至优酷自频道,地址链接:http://v.youku.com/v_show/id_XMzkzNzAxNDk2OA==.html?spm=a2hzp.8244740.0.0 2.视 ...
- Scrum立会报告+燃尽图(十一月十八日总第二十六次):功能开发与讨论贡献分配规则
此作业要求参见:https://edu.cnblogs.com/campus/nenu/2018fall/homework/2284 项目地址:https://git.coding.net/zhang ...
- Ubuntu命令行安装显卡驱动
1. sudo apt-et purge nvidia* 卸载原有驱动 2. sudo add-apt-repository ppa:graphics-drivers sudo apt-get upd ...
- OSG学习:LOD、数据分页、动态调度
LOD(level of detail):是指根据物体模型的结点在显示环境中所处的位置和重要度,决定物体渲染的资源分配,降低非重要物体的面数和细节度,从而获得高效率的渲染运算.在OSG的场景结点组织结 ...