题目大意

洛谷链接

给定一张\(T\)条边的无向连通图,求从\(S\)到\(E\)经过\(N\)条边的最短路长度。

输入格式

第一行四个正整数\(N,T,S,E\),意义如题面所示。

接下来\(T\)行每行三个正整数\(w,u,v\)分别表示路径的长度,起点和终点。

输出格式

一行一个整数表示图中从\(S\)到\(E\)经过\(N\)条边的最短路长度。

数据范围

对于所有的数据,保证\(1\le N\le 10^6,2\le T\le 100\)。

所有的边保证\(1\le u,v\le 10001,1\le w\le 1000\)。

样例输入

2 6 6 4

11 4 6

4 4 8

8 4 9

6 6 8

2 6 9

3 8 9

样例输出

10

思路

假设有两个矩阵,一个代表恰好经过\(x\)条边的最短路,另外一个代表恰好经过\(y\)条边的最短路。只要把两个矩阵合就可以了。

\(c[i][j]=a[i][k]+b[k][j]\);

其实还是Floyd。

代码

#include <cstdio>
#include <iostream>
#include <algorithm>
#include <cstring>
using namespace std;
int num[1000005];
int n,s,t,e,tot; struct map{
int a[500][500];
map operator * (const map &x) const{
map c;
memset(c.a,0x3f,sizeof(c.a));
for(int k=1;k<=tot;k++)
for(int i=1;i<=tot;i++)
for(int j=1;j<=tot;j++)
c.a[i][j]=min(c.a[i][j],a[i][k]+x.a[k][j]);
return c;
}
}dis,ans; void init(){
memset(dis.a,0x3f,sizeof(dis.a));
int x,y,z;
scanf("%d%d%d%d",&n,&t,&s,&e);
for(int i=1;i<=t;i++){
scanf("%d%d%d",&x,&y,&z);//离散化
if(!num[y])
num[y]=++tot;
if(!num[z])
num[z]=++tot;
dis.a[num[y]][num[z]]=dis.a[num[z]][num[y]]=x;
}
} void work(){//矩阵快速幂
n--;
ans=dis;
while(n){
if(n&1)
ans=ans*dis;
dis=dis*dis;
n>>=1;
}
} int main(){
init();
work();
printf("%d",ans.a[num[s]][num[e]]);
cout<<ans.a[num[s]][num[e]];
}

最新文章

  1. connect mysql from another host
  2. Python Beautiful Soup学习之HTML标签补全功能
  3. 如何通过IP地址添加网络打印机
  4. 微信不支持Object.assign
  5. TCP/IP 之大明王朝邮差
  6. ftl文件格式化jsp形式显示
  7. JavaScript【面向对象】-静态方法-私有方法-公有方法-特权方法
  8. Jfinal----Handler之责任链设计模式
  9. Python文件处理之文件读取方式(二)
  10. Markdown 入门教程
  11. Android开发,Eclipse创建aidl接口时,出错
  12. SliverList , SliverFixedExtentList
  13. 日常用的css基础和自己常用的js封装
  14. 【LOJ】#2187. 「SHOI2014」三叉神经树
  15. 细说java中的类
  16. django 存在则忽略, 不存在则创 TagSheet.objects.get_or_create(tag=&#39;test&#39;)
  17. ES6对抽象工厂模式与策略模式结合的实践
  18. Spring MVC 实现文件的上传和下载
  19. js 获取时间戳的方法
  20. linux --&gt; 删除指定目录下所有文件

热门文章

  1. IDEA中配置Tomcat中的Artifact
  2. 浅入 ABP 系列(4):事件总线
  3. 规则引擎在IoT的重要性?
  4. Spring Boot项目集成flyway
  5. matlab数字图像处理-冈萨雷斯-读取,显示,保存图像
  6. python 中简单的输出语句
  7. git线上操作
  8. 解决vue版本不匹配的问题 Vue packages version mismatch:
  9. swagger2注解详细说明
  10. 安装了高版本OS X 之后无法使用MacPorts的port命令