Topic Links:
https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem= 1927
Test instructions: N points m edge, the shortest distance from S to E
Code:
#include <stdio.h>#include <iostream>#include <math.h>#include <stdlib.h>#include <ctype.h>#include <algorithm>#include <vector>#include <string>#include <queue>#include <stack>#include <set>#include <map>#include <string.h>using namespace STD;Const intINF =0x3f3f3f3f;Const intMAXN =1000010;structqnode{intVintC Qnode (int_v =0,int_c =0): V (_v), C (_c) {}BOOL operator< (ConstQnode &r)Const{returnC > r.c; }};structedge{intV, cost; Edge (int_v =0,int_cost =0): V (_v), cost (_cost) {}}; vector<Edge>E[MAXN];BOOLVIS[MAXN];intDIST[MAXN];voidDijkstraintNintStartintED) {memset(Vis,false,sizeof(VIS)); for(inti =0; I < n; i++) Dist[i] = INF; Priority_queue<qnode> que; while(!que.empty ()) Que.pop (); Dist[start] =0; Que.push (Qnode (Start,0)); Qnode tmp; while(!que.empty ()) {tmp = Que.top (); Que.pop ();intu = TMP.V;if(Vis[ed])Continue;if(Vis[u])Continue; Vis[u] =true; for(inti =0; I < e[u].size (); i++) {intv = e[u][i].v;intCost = E[u][i].cost;if(!vis[v] && dist[v] > Dist[u] + cost) {Dist[v] = Dist[u] + cost; Que.push (Qnode (V, Dist[v])); } } }}voidAddedge (intUintVintW) {E[u].push_back (Edge (V, W));}intN, M, S, D;intA, B, C;intMain () {intTintCases =1;scanf("%d", &t); while(t--) {scanf("%d%d%d%d", &n, &m, &s, &d); for(inti =0; I <= N; i++) e[i].clear (); while(m--) {scanf("%d%d%d", &a, &b, &c); Addedge (A, B, c); Addedge (b, A, c); } Dijkstra (n, S, D);if(Dist[d] = = INF)printf("Case #%d:unreachable\n", cases++);Else printf("Case #%d:%d\n", cases++, Dist[d]); }return 0;}
Copyright NOTICE: Reprint please indicate the source.
UVA 10986Sending Email "Dijkstra + heap Optimization"