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;
}
相关推荐
念恒123066 分钟前
继承(下) (Inheritance)
c++
海清河晏1111 小时前
数据结构 | 单循环链表
数据结构·算法·链表
H Journey1 小时前
C++之 CMake、CMakeLists.txt、Makefile
开发语言·c++·makefile·cmake
wuweijianlove5 小时前
算法性能的渐近与非渐近行为对比的技术4
算法
研究点啥好呢5 小时前
Github热门项目推荐 | 创建你的像素风格!
c++·python·node.js·github·开源软件
_dindong5 小时前
cf1091div2 C.Grid Covering(数论)
c++·算法
AI成长日志5 小时前
【Agentic RL】1.1 什么是Agentic RL:从传统RL到智能体学习
人工智能·学习·算法
沫璃染墨6 小时前
C++ string 从入门到精通:构造、迭代器、容量接口全解析
c语言·开发语言·c++
黎阳之光6 小时前
黎阳之光:视频孪生领跑者,铸就中国数字科技全球竞争力
大数据·人工智能·算法·安全·数字孪生
skywalker_116 小时前
力扣hot100-3(最长连续序列),4(移动零)
数据结构·算法·leetcode