一直RE,连样例都过不去,求救
#include<iostream>
#include<cstdio>
#include<cstring>
#include<queue>
#define int long long
using namespace std;
int n,m,s;
int ans;
struct node {
int pos;
int dis;
node(int POS, int DIS) : pos(POS), dis(DIS) {}
bool operator > (const node& o) const { return dis > o.dis; }
};
priority_queue< node, vector<node>, greater<node> > q;
//struct node{
// int dis,pos;
// bool operator < (const node &x) const {
// return x.dis<dis;
// }
//};
//
//priority_queue< node > q;
struct edge{
int u,v,w;
}e[500010];
int lk[500500],ltp;
int dis[500500];
void add(int x,int y,int z){
e[++ltp]={lk[x],y,z};
lk[x]=ltp;
}
void work(int s){
for(int i=1;i<=n*2;++i) dis[i]=9000000000000000;
dis[s]=0;
q.push((node){0,s});
while(!q.empty()){
node tmp=q.top();q.pop();
int x=tmp.pos,y=tmp.dis;
if(dis[x]<y) continue;
for(int i=lk[x];~i;i=e[i].u){
int v=e[i].v;
if(dis[v]>y+e[i].w){
dis[v]=y+e[i].w;
q.push((node){dis[v],v});
}
}
}
}
signed main(){
memset(lk,-1,sizeof(lk));
scanf("%d%d",&n,&m);
for(int i=1;i<=m;++i){
int a,b,c;
scanf("%d%d%d",&a,&b,&c);
add(a,b,c);add(a+n,b+n,c);
}
work(1);
for(int i=2;i<=n<<1;++i) ans=ans+dis[i];
work(n+1);
for(int i=n+2;i<=n<<1;++i) ans+=dis[i];
cout<<ans;
return 0;
}