啊我沙雕了,竟然以为DJ的邻接矩阵不用初始化。。
#include<bits/stdc++.h>
#define R register int
using namespace std;
//const int inf=0x3f3f3f3f;
inline int read()
{
int x=0,f=1;char ch=getchar();
while(ch<'0'||ch>'9') if(ch=='-') f=-1,ch=getchar();
while(ch>='0'&&ch<='9') x=(x<<3)+(x<<1)+ch-'0',ch=getchar();
return x*f;
}
int n,m,a[501][501],dis[501],inf;
bool vis[501];
inline void Run()
{
memset(dis,0x3f,sizeof(dis));
inf=dis[1];
dis[1]=0;
for(R i=1;i<n;i++)
{
int x=0;
for(R j=1;j<=n;j++)
{
if((!vis[j])&&(x==0||dis[j]<dis[x]))
x=j;
}
vis[x]=1;
for(R k=1;k<=n;k++)
//if(a[x][k])
dis[k]=min(dis[k],dis[x]+a[x][k]);
}
}
int main()
{
n=read();m=read();
for(R i=1;i<=n;i++)
for(R j=1;j<=n;j++)
if(i==j) a[i][j]=0;
else a[i][j]=0x3f3f3f3f;//初始化
for(R i=1;i<=m;i++)
{
int x=read(),y=read(),z=read();
a[x][y]=min(a[x][y],z);
}
Run();
if(dis[n]>=inf/2) cout<<"-1";
else printf("%d",dis[n]);
return 0;
}