Challenge——spfa

Challenge

题目描述

wys和zerinf经常出题来虐Zhuyu。有一天, wys搞了一个有向图,每条边的长度都是1。 他想让Zhuyu求出点1到点 N 的最短路。

"水题啊。", Zhuyu这么说道。

所以zerinf把某些边的长度增加了1(也就是说,每条边的长度不是1就是2)。现在,可怜的Zhuyu要向你求助了。

输入格式

第1行,两个整数 N (1 ≤ N ≤ 10^5) 和 M (1 ≤ M ≤ 10^6), 点和边的数量。

第2到 M + 1行: 三个整数 Ui, Vi, Wi (1 ≤ Wi ≤ 2), 从点 Ui 到 Vi 长度为 Wi 的边。

输出格式

一个整数,表示点1到点N的最短路。数据保证至少存在一条路径。

样例输入1

3 3

1 2 1

2 3 1

1 3 2

样例输出1

2

cpp 复制代码
#include<bits/stdc++.h>
using namespace std;
int n,m,v,u,pre[100002],w,dis[100002],cnt;
queue<int> q;
bool used[100002];
struct ed{
	int to,w,next;
}e[1000002];
void add(int u,int v,int w,int b){
	e[++cnt].to=v;
	e[cnt].next=pre[u];
	e[cnt].w=w;
	pre[u]=b;
}
int main(){
	memset(pre,-1,sizeof(pre));
	memset(dis,0x3f,sizeof(dis));
	scanf("%d%d",&n,&m);
	for(int i=1;i<=m;i++){
		scanf("%d%d%d",&u,&v,&w);
		add(u,v,w,i);
	}
	q.push(1);
	used[1]=1;
	dis[1]=0;
	while(!q.empty()){
		int now=q.front();//
		q.pop();
		used[now]=0;
		for(int i=pre[now];i!=-1;i=e[i].next ){//printf("%d\n",i);
			if(e[i].w+dis[now]<dis[e[i].to]){
				dis[e[i].to]=e[i].w+dis[now];
				if(!used[e[i].to]){
					used[e[i].to]=1;
					q.push(e[i].to);
				}
			}
		}
	}
	printf("%d\n",dis[n]);
}
/*
6 9
1 2 1
2 4 3
4 6 15
1 3 12
2 3 1
4 3 4
3 5 5
4 5 13
5 6 4

11
*/
相关推荐
王老师青少年编程3 小时前
gesp(C++五级)(14)洛谷:B4071:[GESP202412 五级] 武器强化
开发语言·c++·算法·gesp·csp·信奥赛
DogDaoDao3 小时前
leetcode 面试经典 150 题:有效的括号
c++·算法·leetcode·面试··stack·有效的括号
Coovally AI模型快速验证4 小时前
MMYOLO:打破单一模式限制,多模态目标检测的革命性突破!
人工智能·算法·yolo·目标检测·机器学习·计算机视觉·目标跟踪
可为测控5 小时前
图像处理基础(4):高斯滤波器详解
人工智能·算法·计算机视觉
Milk夜雨5 小时前
头歌实训作业 算法设计与分析-贪心算法(第3关:活动安排问题)
算法·贪心算法
BoBoo文睡不醒5 小时前
动态规划(DP)(细致讲解+例题分析)
算法·动态规划
apz_end6 小时前
埃氏算法C++实现: 快速输出质数( 素数 )
开发语言·c++·算法·埃氏算法
仟濹6 小时前
【贪心算法】洛谷P1106 - 删数问题
c语言·c++·算法·贪心算法
CM莫问7 小时前
python实战(十五)——中文手写体数字图像CNN分类
人工智能·python·深度学习·算法·cnn·图像分类·手写体识别
sz66cm7 小时前
LeetCode刷题 -- 45.跳跃游戏 II
算法·leetcode