有RE 有WA 求dalao帮忙康康
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<queue>
#include<cstring>
using namespace std;
#define re register int
#define il inline
#define MAXN 1005
#define MAXM 100005
#define INF 0x7fffffff
#define LL long long
int n,m,cnt=0;
LL dis1[MAXN],dis2[MAXN];
int head1[MAXN]={},head2[MAXN]={};
bool mark[MAXN]={};
LL len=0;
struct nodea
{
int to,w,nex;
}a[MAXM];
struct nodeb
{
int to,w,nex;
}b[MAXM];
struct cmp1
{
bool operator()(int r,int l)
{
return dis1[l]<dis1[r];
}
};
struct cmp2
{
bool operator()(int r,int l)
{
return dis2[l]<dis2[r];
}
};
priority_queue <int,vector<int>,cmp1> que1;
priority_queue <int,vector<int>,cmp2> que2;
il void add1 (int l,int r,int val)
{
// if(l==1) cout<<cnt<<" "<<r<<endl;
a[++cnt].to=r;
a[cnt].w=val;
a[cnt].nex=head1[l];
head1[l]=cnt;
}
il void add2 (int l,int r,int val)
{
b[++cnt].to=r;
b[cnt].w=val;
b[cnt].nex=head2[l];
head2[l]=cnt;
}
il void dijkstra1( )
{
for(re i=1;i<=n;++i)
dis1[i]=INF;
dis1[1]=0;
que1.push(1);
while(!que1.empty())
{
int p=que1.top();
que1.pop();
if(mark[p]) continue;
mark[p]=true;
for(re i=head1[p];i;i=a[i].nex)
{
int v=a[i].to;
//cout<<v<<endl;
if(dis1[v]>dis1[p]+a[i].w)
{
// cout<<dis1[v]<<endl;
dis1[v]=dis1[p]+a[i].w;
que1.push(v);
}
}
}
}
il void dijkstra2( )
{
for(re i=1;i<=n;++i)
dis2[i]=INF;
dis2[1]=0;
que2.push(1);
while(!que2.empty())
{
int p=que2.top();
que2.pop();
if(mark[p]) continue;
mark[p]=true;
for(re i=head2[p];i;i=b[i].nex)
{
int v=b[i].to;
if(dis2[v]>dis2[p]+b[i].w)
{
dis2[v]=dis2[p]+b[i].w;
que2.push(v);
}
}
}
}
int main ( )
{
std::ios::sync_with_stdio(false);
cin.tie(0);
int l,r,val;
cin>>n>>m;
for(re i=1;i<=m;++i)
{
cin>>l>>r>>val;
add1(l,r,val);
add2(r,l,val);
}
dijkstra1();
memset(mark,0,sizeof(mark));
// memset(head,0,sizeof(head));
dijkstra2();
for(re i=1;i<=n;++i)
len+=dis1[i]+dis2[i];
printf("%lld",len);
return 0;
}