hiho1093_spfa
题目
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的更多相关文章
随机推荐
- ubuntu /etc/profile和/etc/environment的比较
先将export LANG=zh_CN加入/etc/profile ,退出系统重新登录,登录提示显示英文. 将/etc/profile 中的export LANG=zh_CN删除,将LNAG=zh_C ...
- vim基本使用
i 进入插入状态 esc 退出插入状态 x 删除一个字符 dd 删除一行,并拷贝 yy 拷贝 p 粘贴 u 撤销 ctrl+r 重做 :w 保存 :q 退出 :q! → 退出不保存
- 命名空间std引用<iostream>时使用
所谓namespace,是指标识符的各种可见范围. C++标准程序库中的所有标识符都被定义于一个名为std的namespace中,这样命名空间std内定义的所有标识符都有效. 为什么把cout等放在s ...
- zh-cn en-uk、zh-tw表示语言(文化)代码与国家地区对照表(最全的各国地区对照表)
af 公用荷兰语 af-ZA 公用荷兰语 - 南非 sq 阿尔巴尼亚 sq-AL 阿尔巴尼亚 -阿尔巴尼亚 ar 阿拉伯语 ar-DZ 阿拉伯语 -阿尔及利亚 ar-BH 阿拉伯语 -巴林 ar-EG ...
- 【leetcode❤python】350. Intersection of Two Arrays II
#-*- coding: UTF-8 -*- class Solution(object): def intersect(self, nums1, nums2): ...
- CUBRID学习笔记 32 对net的datatable的支持 cubrid教程
在net的驱动中实现理一下的支持 DataTable data populate Built-in commands construct: INSERT , UPDATE, DELETE Column ...
- 分区格式化mkfs
mkfs — build a Linux filesystem 用法举例: mkfs.ext3 /dev/sdb1 #把sdb1格式化为ext3文件系统 也可以写成 mkfs -t ext3 /d ...
- win7删除IE图标方法-----(注册表找不到对应的IE项)
删除个IE图标费了半天事,硬是找不到网上说的那个 [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Desk ...
- 3.mybatis注解
在上篇2.mybatis入门实例(一) 连接数据库进行查询的基础上 1.添加Mapper接口:UserMapper接口,并使用mybatis的注解 import java.util.List; imp ...
- TestNg测试框架使用笔记
Gradle支持TestNG test { useTestNG(){ //指定testng配置文件 suites(file('src/test/resources/testng.xml')) } } ...