/****
有向边,求单源点到所有点的最短路,直接SPFA
求多源点到单终点的最短路,反向建图,就变成
单源点到多终点的最短路问题
*/
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <algorithm>
#include <vector>
#include <queue>
using namespace std;
const int maxn = 1000100;
const int inf = 0x3f3f3f3f;
struct Edge{
int from, to, weight;
};
int n, m;
vector<Edge> edges, edges1;
vector<int> G1[maxn], G2[maxn];
int inq[maxn], d2[maxn], d1[maxn];
void addedge(int from, int to, int weight){
edges.push_back((Edge){from, to, weight});
int m = edges.size();
G1[from].push_back(m - 1);
edges1.push_back((Edge){to, from, weight});
m = edges1.size();
G2[to].push_back(m - 1);
}
void init(){
edges.clear();
edges1.clear();
for(int i = 0; i <= n; i ++){
G1[i].clear(); G2[i].clear();
}
}
void spfa1(int s, int t){
queue<int> q;
for(int i = 0; i <= n; i ++){
d1[i] = inf; inq[i] = false;
}
d1[s] = 0; inq[s] = true;
q.push(s);
while(!q.empty()){
int u = q.front(); q.pop();
inq[u] = false;
for(int i = 0; i < G1[u].size(); i ++){
Edge& e = edges[G1[u][i]];
int v = e.to;
if(d1[u] + e.weight < d1[v]){
d1[v] = d1[u] + e.weight;
if(!inq[v]){
inq[v] = true;
q.push(v);
}
}
}
}
}
void spfa2(int s, int t){
queue<int> q;
for(int i = 0; i <= n; i ++){
d2[i] = inf; inq[i] = false;
}
d2[s] = 0; inq[s] = true;
q.push(s);
while(!q.empty()){
int u = q.front(); q.pop();
inq[u] = false;
for(int i = 0; i < G2[u].size(); i ++){
Edge& e = edges1[G2[u][i]];
int v = e.to;
if(d2[u] + e.weight < d2[v]){
d2[v] = d2[u] + e.weight;
if(!inq[v]){
inq[v] = true;
q.push(v);
}
}
}
}
}
int main()
{
int T;
scanf("%d", &T);
while(T --){
scanf("%d%d", &n, &m);
init();
while(m --){
int u, v, w;
scanf("%d%d%d", &u, &v, &w);
addedge(u, v, w);
}
int ans = 0;
spfa1(1, n);
spfa2(1, n);
for(int i = 2; i <= n; i ++){
ans += d1[i];
ans += d2[i];
}
printf("%d\n", ans);
}
return 0;
}
HDU-1535-.zip_多源点
版权申诉
109 浏览量
2022-09-24
06:21:15
上传
评论
收藏 985B ZIP 举报
局外狗
- 粉丝: 64
- 资源: 1万+
最新资源
- 基于matlab实现LMS与RLS算法的自适应均衡程序,包括加性高斯信道、瑞利平坦信道、频率选择性衰落信道 .rar
- 基于matlab实现LMS自适应信道均衡程序以及学习曲线绘制,程序为matlab代码 .rar
- 基于C++qt 停车场管理系统源码+sql文件.zip
- 基于matlab实现OFDM信道估计和均衡的仿真程序,包括MMSE、LS、ZF等方法 .rar
- 基于matlab实现菜品推荐 主成分分析处理稀疏矩阵后,采用协同过滤算法进行推荐.rar
- 基于matlab实现恒模算法的简介,它适用于信道的盲均衡 Matlab程序提供基本的框架,可以修该里面的参数以测试该算法.rar
- 基于C# WinForm框架开发的图书管理系统源码+sql文件.zip
- 基于matlab实现快速样本熵算法,能够提高5倍,数据长度越长,提高越明显.rar
- 基于matlab实现频谱分析,用于对等时间间距的序列进行频谱分析.rar
- 基于matlab实现实现了基于项目的协同过滤代码,MATLAB实现.rar
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈