1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35
| struct Node{ int dis,pos; friend bool operator < (Node A,Node B){ return A.dis > B.dis; } Node(int d,int p) : dis(d) , pos(p) {}; };
priority_queue<Node> Q; int dis[maxN]; int vis[maxN];
inline void Dijkstra(int u){ memset(dis,0x3f,sizeof(dis)); memset(vis,0,sizeof(vis)); dis[u] = 0; vis[u] = 1; Q.push(Node(0,u)); while(!Q.empty()){ int pos = Q.top().pos; Q.pop(); for(int i = head[pos];i;i = edge[i].nxt){ int to = edge[i].to; int wei = edge[i].w; if(dis[to] > dis[pos] + wei){ dis[to] = dis[pos] + wei; if(!vis[to]) Q.push(Node(dis[to],to)); } } } }
|