题目

SPFA模板题,题目中数据可能有两个点之间有多条边直接相连,使用 unordered_map< int, unordered_map< int, int>>, 来存储图的结构,可以方便的去除重边。

实现

#include<stdio.h>
#include<cmath>
#include<iostream>
#include<string.h>
#include<algorithm>
#include<queue>
#include<stack>
#include<map>
#include<deque>
#include<string>
#include<unordered_map>
#include<unordered_set>
using namespace std; #define max(a, b) (a) > (b)? (a) : (b)
#define min(a, b) (a) < (b)? (a) : (b)
unordered_map<int, unordered_map<int, int>> gMap;
int gMinDist[100005];
bool gInQueue[100005];
int Spfa(int s, int t) {
queue<int> Q;
Q.push(s);
memset(gMinDist, -1, sizeof(gMinDist));
memset(gInQueue, false, sizeof(gInQueue));
gMinDist[s] = 0;
gInQueue[s] = true;
//题目中不存在负权边,因此不需要检查有负权回路。检查存在负权回路,则需要通过
//判断否个点是否被更新超过 N 次,N为点的总数
while (!Q.empty()) {
int u = Q.front();
Q.pop();
gInQueue[u] = false;
for (auto x : gMap[u]) {
int v = x.first;
if (gMinDist[v] == -1 || gMinDist[v] > gMinDist[u] + x.second) {
gMinDist[v] = gMinDist[u] + x.second;
if (!gInQueue[v]) { //如果不存在队列中,则加入队列。剪枝优化
Q.push(v);
}
}
}
}
return gMinDist[t];
}
int main() {
int n, m, s, t;
int u, v, d;
scanf("%d %d %d %d", &n, &m, &s, &t);
for (int i = 0; i < m; i++) {
scanf("%d %d %d", &u, &v, &d); //用 unordered_map 存储图的结构,可以方便的去除重边
if (gMap.find(u) == gMap.end() || (gMap[u].find(v) == gMap[u].end() || gMap[u][v] > d)) {
gMap[u][v] = d;
gMap[v][u] = d;
}
}
int min_dist = Spfa(s, t);
printf("%d\n", min_dist);
return 0;
}

hiho1093_spfa的更多相关文章

随机推荐

  1. 从hadoop框架与MapReduce模式中谈海量数据处理

    http://blog.csdn.net/wind19/article/details/7716326 前言 几周前,当我最初听到,以致后来初次接触Hadoop与MapReduce这两个东西,我便稍显 ...

  2. java提高篇---ArrayList

    一.ArrayList概述 ArrayList是实现List接口的动态数组,所谓动态就是它的大小是可变的.实现了所有可选列表操作,并允许包括 null 在内的所有元素.除了实现 List 接口外,此类 ...

  3. memcached完全剖析系列——一、memcached基础

    转自:http://blog.charlee.li/memcached-001/

  4. zookeeper系列之六—zookeeper之应用

    http://www.cnblogs.com/sharpxiajun/archive/2013/06/02/3113923.html Zookeeper是hadoop的一个子项目,虽然源自hadoop ...

  5. SELECT INTO FROM mysql Undeclared variable

    使用SELECT INTO FROM进行数据表和数据的复制时,会提示Error Code: 1327. Undeclared variable: 这是因为mysql 数据库不支持 SELECT INT ...

  6. CodeForces 490C Hacking Cypher

    Hacking Cypher Time Limit:1000MS     Memory Limit:262144KB     64bit IO Format:%I64d & %I64u Sub ...

  7. Win 64 register usage

    http://www.mouseos.com/win64/registers.html Seems UEFI using rcx, rdx, r8, r9, r10, r11, r12 to stor ...

  8. JQuery中Ajax的Post提交中文乱码的解决方案

    出自:http://m.blog.csdn.net/blog/blueheart20/26370023 引言: 在JQuery的Ajax POST请求中,进行请求,其中的中文在后台,显示为乱码,该如何 ...

  9. 基于ADL5317的雪崩光电二极管(APD)偏压控制/光功率监测电路的设计

    1 引言 目前,雪崩光电二极管(APD)作为一种高灵敏.能精确接收数据和测量光功率的光探测器件广泛应用于光纤传感.光纤通信网络中.它借助于内部强电场作用产生雪崩倍增效应,具有极高的内部增益(可达102 ...

  10. IDoc

    声明:原创作品,转载时请注明文章来自SAP师太技术博客( 博/客/园www.cnblogs.com):www.cnblogs.com/jiangzhengjun,并以超链接形式标明文章原始出处,否则将 ...