Description

FJ的N(2 <= N <= 1,000,000)头奶牛选择了接力跑作为她们的日常锻炼项目。至于进行接力跑的地点 自然是在牧场中现有的T(2 <= T <= 100)条跑道上。 农场上的跑道有一些交汇点,每条跑道都连结了两个不同的交汇点 I1_i和I2_i(1 <= I1_i <= 1,000; 1 <= I2_i <= 1,000)。每个交汇点都是至少两条跑道的端点。 奶牛们知道每条跑道的长度length_i(1 <= length_i <= 1,000),以及每条跑道连结的交汇点的编号 并且,没有哪两个交汇点由两条不同的跑道直接相连。你可以认为这些交汇点和跑道构成了一张图。 为了完成一场接力跑,所有N头奶牛在跑步开始之前都要站在某个交汇点上(有些交汇点上可能站着不只1头奶牛)。当然,她们的站位要保证她们能够将接力棒顺次传递,并且最后持棒的奶牛要停在预设的终点。 你的任务是,写一个程序,计算在接力跑的起点(S)和终点(E)确定的情况下,奶牛们跑步路径可能的最小总长度。显然,这条路径必须恰好经过N条跑道。

Input

* 第1行: 4个用空格隔开的整数:N,T,S,以及E

* 第2..T+1行: 第i+1为3个以空格隔开的整数:length_i,I1_i,以及I2_i, 描述了第i条跑道。

Output

* 第1行: 输出1个正整数,表示起点为S、终点为E,并且恰好经过N条跑道的路 径的最小长度

Sample Input

2 6 6 4
11 4 6
4 4 8
8 4 9
6 6 8
2 6 9
3 8 9

Sample Output

10
 

如果不是在线代专题里做这题 打死我也想不到正解

大概就是把矩阵乘法转化成Floyd的形式

100个边肯定连不了那么多点  所以离散化一下有用的点

然后放到矩阵里面

那么就可以通过类似矩阵快速幂的形式 从经过一条边的最短路->2条边->3条边……

乘n次就行了

#include<cstdio>
#include<iostream>
#include<cstring>
using namespace std;
int n,m,S,E,lim;
const int N=;
struct matrix
{
int a[][];
matrix()
{
memset(a,0x3f,sizeof(a));
}
};
matrix operator * (matrix x,matrix y)
{
matrix c;
for(int k=;k<=lim;k++)
for(int i=;i<=lim;i++)
for(int j=;j<=lim;j++)
c.a[i][j]=min(c.a[i][j],x.a[i][k]+y.a[k][j]);
return c;
};
int read()
{
int f=,x=;char ch=getchar();
while(ch<''||ch>''){if(ch=='-')f=-;ch=getchar();}
while(ch>=''&&ch<='')x=x*+ch-'',ch=getchar();
return x*f;
}
int map[N];
matrix qpow(matrix a,int b)
{
matrix res=a;
while(b)
{
if(b&)res=res*a;
a=a*a;
b>>=;
}
return res;
}
int main()
{
n=read();m=read();S=read();E=read();
matrix g;
for(int i=;i<=m;i++)
{
int z=read(),x=read(),y=read();
if(!map[x])map[x]=++lim;
if(!map[y])map[y]=++lim;
x=map[x],y=map[y];
g.a[x][y]=g.a[y][x]=z;
}
matrix ans=qpow(g,n-);
cout<<ans.a[map[S]][map[E]]<<endl;
return ;
}

最新文章

  1. JavaScript(三) 正则表达式 以及实现的功能
  2. sprig里的controller之间的跳转的问题
  3. Programming in lua 杂记(转)
  4. hdu 3236 二维背包
  5. RDLC系列之三 图片显示
  6. android studio里的build.gradle基本属性
  7. HTML5 History对象,Javascript修改地址栏而不刷新页面
  8. OpenGL ES 正反面设置指令
  9. java javaEE javaWEB J2EE程序猿猿程序是脑损伤,终身工作程序猿
  10. 深入理解php内核 编写扩展 II:参数、数组和ZVALs
  11. html 自定义上传图片样式,并回显
  12. std::rotate使用
  13. protobuffer、gRPC、restful gRPC的相互转化
  14. AOP实现拦截对象以及获取切入目标方法和注解
  15. 利用Github搭建自己的博客
  16. python数据分析所需要了解的操作。
  17. MATLAB 设置文件的相对路径
  18. SMGP3.0协议的概念知识
  19. UOJ46. 【清华集训2014】玄学
  20. SpringBoot添加支持CORS跨域访问

热门文章

  1. UNP学习第九章 基本名字与地址转换
  2. kubernetes批量删除pod
  3. Jetson Nano系列教程1:烧写系统镜像
  4. &lt;自动化测试&gt;之&lt;Selenium API 的用法1&gt;
  5. 在angular项目中使用bootstrap的tooltip插件时,报错Property &#39;tooltip&#39; does no t exist on type &#39;JQuery&lt;HTMLElement&gt;的解决方法和过程
  6. JavaScript--字符串与JSON对象相互转换
  7. appium 链接真机
  8. The document cannot be opened. It has been renamed, deleted or moved.
  9. 201⑨湘潭邀请赛 Chika and Friendly Pairs(HDU6534)
  10. Java构造函数(构造器)