错误信息:
Runtime Error.
Received signal 11: Segmentation fault with invalid memory reference.
#include<bits/stdc++.h>
using namespace std;
#define int long long
int n,m;
int a[505][505];
int b[505][505];
int dis1[10005];
int dis2[10005];
int dis3[10005];
int dis4[10005];
int fro[10005];
int vis[10005];
int t[505][505];
int tdis[10005];
inline int dij(int s,int *dis,int f){
for (int i=1;i<=n;i++){
dis[i]=1e18;
vis[i]=0;
}
dis[s]=0;
while (1){
int x=0;
for(int i=1;i<=n;i++){
if(!vis[i] && dis[x]>dis[i]){
x=i;
}
}
if(!x){
break;
}
vis[x]=1;
for(int i=1;i<=n;i++){
int w;
if (f==1){
w=a[i][x];
}
else{
w=a[x][i];
}
if(!vis[i] && dis[x]+w<dis[i]){
dis[i]=dis[x]+w;
if(f<2){
fro[i]=x;
}
}
}
}
if (f<2){
for (int i=1;i<=n;i++){
t[fro[i]][i]=1;
}
}
}
struct Node{
int fro,to,val,sp;
}edge[200005];
int tag[505][505];
signed main(){
cin>>n>>m;
for (int i=1;i<=n;i++){
for (int j=1;j<=n;j++){
a[i][j]=1e14;
b[i][j]=1e14;
}
}
for (int i=1;i<=n;i++){
a[i][i]=0;
}
for (int i=1;i<=m;i++){
int x,y,c,d;
cin>>x>>y>>c>>d;
edge[i].fro=x;
edge[i].sp=d;
edge[i].to=y;
edge[i].val=c;
if (a[x][y]>c){
b[x][y]=a[x][y];
a[x][y]=c;
}
else if (b[x][y]>c){
b[x][y]=c;
}
}
dij(1,dis1,0);
dij(n,dis2,1);
dij(n,dis3,0);
dij(1,dis4,1);
int ans=dis1[n]+dis3[1];
for (int i=1;i<=m;i++){
int x=edge[i].fro;
int v=edge[i].to;
int co=edge[i].val;
int d=edge[i].sp;
if (t[x][v] && a[x][v]==co && !tag[x][v]){
int cu=a[x][v];
int cv=a[v][x];
a[v][x]=min(a[v][x],co);
if (a[x][v]==co){
a[x][v]=b[x][v];
}
int res=d;
dij(1,tdis,2);
res+=tdis[n];
dij(n,tdis,2);
res+=tdis[1];
ans=min(ans,res);
a[x][v]=cu;
a[v][x]=cv;
tag[x][v]=1;
}
else{
ans=min(ans,d+min(dis1[n],dis1[v]+co+dis2[x])+min(dis3[1],dis3[v]+co+dis4[x]));
}
}
if (ans>=1e18){
cout<<-1;
}
else{
cout<<ans;
}
return 0;
}