题解

用一个矩阵来表示一个图的边的存在性,即矩阵C【i,j】=1表示有一条从i到j的有向边C【i,j】=0表示没有从i到j的边。这个矩阵的k次方后C【i,j】就表示有多少条从i到j恰好经过k条边的路径。

在此题中我们赋予边权值并把矩阵乘法中的+改为min这样这个矩阵的k次方后C【i,j】就表示从i到j恰好经过k条边的最短路径。

 #include<iostream>
#include<cstring>
#include<cstdio>
#include<cmath>
#include<algorithm>
using namespace std;
const int N=;
int n,t,s,e,u[N],v[N],w[N],b[N],a[N],ma[],num,tot;
struct jz{
int a[N][N];
}x;
jz jzc(jz a,jz b){
jz c;
for(int i=;i<=num;i++)
for(int j=;j<=num;j++){
c.a[i][j]=;
}
for(int i=;i<=num;i++)
for(int j=;j<=num;j++)
for(int k=;k<=num;k++){
c.a[i][j]=min(c.a[i][j],a.a[i][k]+b.a[k][j]);
}
return c;
}
jz ksm(jz a,int k){
jz ans=a;
k--;
while(k){
if(k&){
ans=jzc(ans,a);
}
k>>=;
a=jzc(a,a);
}
return ans;
}
int main(){
scanf("%d%d%d%d",&n,&t,&s,&e);
for(int i=;i<=t;i++){
scanf("%d%d%d",&w[i],&u[i],&v[i]);
a[++tot]=u[i];
b[tot]=u[i];
a[++tot]=v[i];
b[tot]=v[i];
}
sort(b+,b++tot);
num=unique(b+,b++tot)-(b+);
for(int i=;i<=tot;i++){
ma[a[i]]=lower_bound(b+,b++num,a[i])-b;
}
for(int i=;i<=num;i++)
for(int j=;j<=num;j++)
x.a[i][j]=;
for(int i=;i<=t;i++){
x.a[ma[u[i]]][ma[v[i]]]=min(x.a[ma[u[i]]][ma[v[i]]],w[i]);
x.a[ma[v[i]]][ma[u[i]]]=min(x.a[ma[v[i]]][ma[u[i]]],w[i]);
}
x=ksm(x,n);
printf("%d",x.a[ma[s]][ma[e]]);
return ;
}
/*
2 6 6 4
11 4 6
4 4 8
8 4 9
6 6 8
2 6 9
3 8 9
*/

最新文章

  1. SQL Server 致程序员(容易忽略的错误)
  2. Icon字体制作
  3. Access restriction错误解决办法
  4. .NET Core尝试
  5. Android:改变Activity切换方式(转载)
  6. Could not load file or assembly &#39;System.Core, Version=2.0.5.0 和autofac冲突的问题
  7. [资料]Nginx做IP访问限制以及正则规则
  8. hdu 1166 敌兵布阵--BIT
  9. PAT1030. Travel Plan
  10. 删除右键菜单的&ldquo;用阿里旺旺发送此文件&rdquo;项
  11. 01.Editplus+Lua配置
  12. 将ADS1.2的工程迁移到KEIL上-基于2440
  13. kafka生产实践
  14. webpack2 前篇
  15. sftp新建用户步骤
  16. MNIST-NameError: name ‘input_data’ is not defined解决办法
  17. Mysql研磨之InnoDB行锁模式
  18. Spring 基于Session的创建实例
  19. mysql null 相关bug
  20. httpd配置

热门文章

  1. 【原创】查询占CPU高的oracle进程
  2. swift语言点评十七-Designated Initializers and Convenience Initializers
  3. Incomplete types-不完全类型
  4. ZBrush中功能强大的插件PaintStop
  5. CentOS7-1810 系统DNS服务器BIND软件配置说明
  6. 洛谷2055 [ZJOI2009]假期的宿舍
  7. [SDOI2008]郁闷的小J(分块)
  8. Object-C学习比较费劲的3点原因
  9. 题解 P3128 【[USACO15DEC]最大流Max Flow】
  10. 数组中出现一次的两个数(三个数)&amp; 求最后一位bit为1