题意:
一张
虽然点为从
离散化后,用邻接矩阵
由
设矩阵
可以发现,上式其实是一个关于
最后,
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<cmath>
#include<algorithm>
using namespace std;
int n,t,s,e;
struct matrix
{
int a[510][510];
}ans,x,now;
int l[1010101],cnt;
matrix multi(matrix u,matrix v)
{
matrix w;
memset(w.a,0x3f,sizeof(w.a));
for(int k=1;k<=cnt;k++)
for(int i=1;i<=cnt;i++)
for(int j=1;j<=cnt;j++)
w.a[i][j]=min(w.a[i][j],u.a[i][k]+v.a[k][j]);
return w;
}
void power()
{
n--;
ans=x;
while(n)
{
if(n&1)
ans=multi(ans,x);
x=multi(x,x);
n>>=1;
}
}
int main()
{
memset(x.a,0x3f,sizeof(x.a));
scanf("%d%d%d%d",&n,&t,&s,&e);
for(int i=1;i<=t;i++)
{
int r,b,c;
scanf("%d%d%d",&r,&b,&c);
if(!l[b])
l[b]=++cnt;
if(!l[c])
l[c]=++cnt;
x.a[l[b]][l[c]]=r;
x.a[l[c]][l[b]]=r;
}
power();
printf("%d",ans.a[l[s]][l[e]]);
return 0;
}