Test instructions
Given an no-map, this graph satisfies the minimum spanning tree of all points to the shortest path of the vertex
"AC"
Notice the two-way side to open 2*MAXM
Note Priority queue
#include <iostream>#include<cstdio>#include<string>#include<cstring>#include<algorithm>#include<vector>#include<queue>using namespacestd;intn,m;Const intmaxn=1e4+2;Const intmaxm=1e5+2;Const intinf=0x3f3f3f3f;structnode{intto ; intNXT; intW;} e[2*MAXM];intHEAD[MAXN];inttot;intDIS[MAXN];intFA[MAXN];BOOLVIS[MAXN];voidinit () {memset (head,-1,sizeof(head)); Tot=0;}voidAddintUintVintW) {e[tot].to=v; E[TOT].W=W; E[TOT].NXT=Head[u]; Head[u]=tot++;}structnode{intID; intFA; intD; Node (int_ID,int_d,int_FA): ID (_id), D (_d), fa (_FA) {}BOOL operator< (Constnode& a)Const{ if(d!=A.D) { returnD>A.D; } returnFa>A.fa; }};intDijkstraints) {Priority_queue<Node>Q; memset (Vis,false,sizeof(VIS)); memset (Dis,inf,sizeof(DIS)); memset (Fa,inf,sizeof(FA)); Dis[s]=0; Fa[s]=0; Q.push (Node (s,dis[s],fa[s)); intans=0; while(!Q.empty ()) {Node Q=Q.top (); Q.pop (); intu=q.id; if(Vis[u])Continue; Vis[u]=true; Ans+=Q.fa; for(inti=head[u];i!=-1; i=e[i].nxt) { intv=e[i].to; intw=E[I].W; if(dis[u]+w<Dis[v]) {Dis[v]=dis[u]+W; FA[V]=W; }Else if(dis[u]+w==dis[v]&&w<Fa[v]) {Fa[v]=W; } q.push (Node (v,dis[v],fa[v)); } } returnans; }intMain () { while(~SCANF ("%d%d",&n,&m)) { if(n==1) {printf ("0\n"); Continue; } init (); intu,v,w; for(intI=0; i<m;i++) {scanf ("%d%d%d",&u,&v,&W); Add (U,V,W); Add (V,U,W); } intAns=dijkstra (1); printf ("%d\n", ans); } return 0;}
"CCF" Traffic planning Dijstra deformation priority queue overloading