401 最短路2

其实应该用dijkstra的 spfa有可能超时的

// 401 最短路2.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//

/*
http://oj.daimayuan.top/course/14/problem/662

给你一张 n个顶点 m条边的有向简单图,顶点编号从 1到 n
,每条边都有一个边权,边权为非负整数。

现在有 k 组询问,每组询问读入两个整数 x,y
,请求出从 x号点到 y号点的最短路的长度。如果不存在从 x号点到 y号点的路径,请输出 -1。

输入格式
第一行三个整数 n,m,k,表示图的顶点数、边数和询问次数。

接下来 m行,每行三个整数 x,y,z
,表示 x号点到 y号点有一条边权为 z的有向边。

接下来 k行,每行两个整数 x,y,表示一组询问。

输出格式
输出共 k行,每行一个数表示一组询问的答案。

样例输入
3 3 2
1 2 3
2 3 2
3 2 1
1 3
3 1
样例输出
5
-1
数据规模
对于所有数据,保证 2≤n≤100000,0≤m≤200000,1≤k≤5,1≤x,y≤n,1≤z≤10000。
*/


#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <vector>
#include <algorithm>
#include <queue>
#include <memory.h>
using namespace std;

typedef pair<int, int> PII;

const int N = 100010, M = 200010;
int h[N], w[M], e[M], ne[M], idx;
int dist[N]; bool st[N];
int n, m, k;


void add(int a, int b, int c) {
	e[idx] = b, w[idx] = c, ne[idx] = h[a], h[a] = idx++;
}

void spfa(int s, int end) {
	memset(dist, 0x3f, sizeof dist);
	memset(st, 0, sizeof st);
	dist[s] = 0;

	queue<int> q;
	q.push(s);
	st[s] = true;

	while (q.size())
	{
		auto t = q.front();
		q.pop();

		st[t] = false;

		for (int i = h[t]; i != -1; i = ne[i])
		{
			int j = e[i];
			if (dist[j] > dist[t] + w[i])
			{
				dist[j] = dist[t] + w[i];
				if (!st[j])     // 如果队列中已存在j,则不需要将j重复插入
				{
					q.push(j);
					st[j] = true;
				}
			}
		}
	}

 
	if (dist[end] == 0x3f3f3f3f) cout << -1 << endl;
	else cout << dist[end] << endl;

	return;
}



int main() {
	memset(h, -1, sizeof h);
	cin >> n >> m >>k;
	for (int i = 0; i < m; i++) {
		int a, b, c; cin >> a >> b >> c;
		add(a, b, c);
	}
	for (int i = 0; i < k; i++) {
		int a, b; cin >> a >> b;
		spfa(a,b);
	}


	return 0;
}

posted on   itdef  阅读(7)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
· 25岁的心里话
历史上的今天:
2019-08-15 acwing 50. 序列化二叉树
2017-08-15 随机发牌 代码
2017-08-15 网络传输 buf 封装 示例代码
2016-08-15 CMAKE 教程前两章节学习

导航

< 2025年3月 >
23 24 25 26 27 28 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 1 2 3 4 5

统计

点击右上角即可分享
微信分享提示