GESP:2025-3月等级8-T1-上学

时间限制 : 1 秒

内存限制 : 128 MB

C 城可以视为由 n个结点与 m条边组成的无向图。这些结点依次以1,2,....n标号,边依次以 1,2...m标号。第i条边(1<=i<=m )连接编号为ui 与vi的结点,长度为li米。 小 A 的学校坐落在 C 城中编号为 s的结点。小 A 的同学们共有 q位,他们想在保证不迟到的前提下,每天尽可能晚地出门上学。但同学们并不会计算从家需要多久才能到学校,于是找到了聪明的小 A。第 i位同学(1<=i<=q )告诉小 A,他的 家位于编号为hi 的结点,并且他每秒能行走 1 米。请你帮小 A 计算,每位同学从家出发需要多少秒才能到达学校呢?

输入

第一行,四个正整数n,m,s,q ,分别表示 C 城的结点数与边数,学校所在的结点编号,以及小 A 同学们的数量。 接下来m行,每行三个正整数ui,vi,li ,表示 C 城中的一条无向边。 接下来q行,每行一个正整数hi,表示一位同学的情况

输出

共q行,对于每位同学,输出一个整数,表示从家出发到学校的最短时间。

样例
输入
复制代码
5 5 3 3
1 2 3
2 3 2
3 4 1
4 5 3
1 4 2
5
1
4
输出
复制代码
4
3
1
提示

数据范围

复制代码
对于 20% 的测试点,保证q=1 。

对于另外20 % 的测试点,保证1<=n<=500 ,1<=m<=500 。
对于所有测试点,保证1<=n<=2 * 10^5 ,1<=m<=2 * 10^5 ,1<=q<=2 * 10^5,1<=ui,vi,s,hi<=n ,1<=li<=10^6 。保证给定的图联通。

---------------------------------------------------------------------------------------------------------------------------------思路:

以学校为原始的点,Dijkstra算法求学校到每一个点的时间。

代码:

cpp 复制代码
#include<bits/stdc++.h>
using namespace std;
const int N=200002;
int n,m,s,t,dis[N];
bool v[N];
struct node
{
	int v,e;
};
vector<node> q[N];
priority_queue<pair<int,int>>Q;
int main()
{
	scanf("%d%d%d%d",&n,&m,&s,&t);
	for(int i=1;i<=m;i++)
	{
		int a,b,c;
		scanf("%d%d%d",&a,&b,&c);
		q[a].push_back(node{c,b});
		q[b].push_back(node{c,a});
	}
	for(int i=1;i<=n;i++)
	{
		dis[i]=INT_MAX;
	}
	dis[s]=0;
	memset(v,0,sizeof(v));
	while(!Q.empty()) Q.pop();
	Q.push(make_pair(0,s));
	while(!Q.empty())
	{
		int wz=Q.top().second;
		Q.pop();
		v[wz]=1;
		for(int i=0;i<q[wz].size();i++)
		{
			if(dis[q[wz][i].e]>dis[wz]+q[wz][i].v)
			{
				dis[q[wz][i].e]=dis[wz]+q[wz][i].v;
				if(!v[q[wz][i].e])
				{
					Q.push(make_pair(-dis[q[wz][i].e],q[wz][i].e));
				}
			}
		}
	}
	for(int i=1;i<=t;i++)
	{
		int d;
		scanf("%d",&d);
		printf("%d\n",dis[d]);
	}
	return 0;
}
相关推荐
小庞在加油1 小时前
《dlib库中的聚类》算法详解:从原理到实践
c++·算法·机器学习·数据挖掘·聚类
ComputerInBook1 小时前
C++ 标准模板库算法之 transform 用法
开发语言·c++·算法·transform算法
2301_803554525 小时前
c++中类的前置声明
java·开发语言·c++
hn小菜鸡7 小时前
LeetCode 377.组合总和IV
数据结构·算法·leetcode
Deepoch7 小时前
Deepoc 大模型:无人机行业的智能变革引擎
人工智能·科技·算法·ai·动态规划·无人机
heimeiyingwang9 天前
【深度学习加速探秘】Winograd 卷积算法:让计算效率 “飞” 起来
人工智能·深度学习·算法
LyaJpunov9 天前
深入理解 C++ volatile 与 atomic:五大用法解析 + 六大高频考点
c++·面试·volatile·atomic
小灰灰搞电子9 天前
Qt PyQt与PySide技术-C++库的Python绑定
c++·qt·pyqt
时空自由民.9 天前
C++ 不同线程之间传值
开发语言·c++·算法
ai小鬼头9 天前
AIStarter开发者熊哥分享|低成本部署AI项目的实战经验
后端·算法·架构