又犯了很弱智的错误,struct中的数组一开始定义成[1111][1111],炸空间惹
struct matrix
{
int x[222][222];
matrix(){memset(x,0x3f,sizeof(x));}
};
matrix multi(matrix a,matrix b,int up)//矩阵相乘
{
matrix temp;
for(int i=1;i<=up;i++)
for(int j=1;j<=up;j++)
for(int k=1;k<=up;k++)
temp.x[i][j]=min(temp.x[i][j],a.x[i][k]+b.x[k][j]);
return temp;
}
matrix quick_multi(matrix a,int n,int up)//矩阵快速幂
{
matrix temp=a;
n--;
while(n)
{
if(n&1) temp=multi(temp,a,up);
a=multi(a,a,up);
n>>=1;
}
return temp;
}
inline void solve()
{
int cnt=0;
map<int,int>mpp;
int k,m,s,e;
matrix mp;
cin>>k>>m>>s>>e;
rpp(i,m)
{
int u,v,w;cin>>w>>u>>v;
if(mpp[u]==0) mpp[u]=++cnt;
if(mpp[v]==0) mpp[v]=++cnt;
mp.x[mpp[u]][mpp[v]]=mp.x[mpp[v]][mpp[u]]=min(mp.x[mpp[v]][mpp[u]],w);
}
matrix tmp = quick_multi(mp,k,cnt);
cout<<tmp.x[mpp[s]][mpp[e]]<<endl;
}
signed main()
{
solve();
return 0;
}