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;
}
相关推荐
Paul_09204 分钟前
golang编程题
开发语言·算法·golang
颜酱9 分钟前
用填充表格法-继续吃透完全背包及其变形
前端·后端·算法
夏秃然12 分钟前
打破预测与决策的孤岛:如何构建“能源垂类大模型”?
算法·ai·大模型
ChoSeitaku16 分钟前
16.C++入门:list|手撕list|反向迭代器|与vector对比
c++·windows·list
氷泠16 分钟前
课程表系列(LeetCode 207 & 210 & 630 & 1462)
算法·leetcode·拓扑排序·反悔贪心·三色标记法
代码or搬砖19 分钟前
JVM垃圾回收器
java·jvm·算法
老鼠只爱大米21 分钟前
LeetCode算法题详解 15:三数之和
算法·leetcode·双指针·三数之和·分治法·three sum
客卿12321 分钟前
C语言刷题--合并有序数组
java·c语言·算法
Qhumaing22 分钟前
C++学习:【PTA】数据结构 7-1 实验6-1(图-邻接矩阵)
c++·学习·算法
No0d1es22 分钟前
2025年12月 GESP CCF编程能力等级认证C++一级真题
开发语言·c++·青少年编程·gesp·ccf