当前位置: 首页 > article >正文

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

#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
*/


http://www.kler.cn/a/282382.html

相关文章:

  • Prometheus面试内容整理-生态系统和集成
  • 基于SpringBoot的旅游网站(程序+数据库+报告)
  • 网络安全SQL初步注入2
  • leetcode面试 150题之 三数之和 复刷日记
  • OpenHarmony-1.启动流程
  • 华为Ensp模拟器配置RIP路由协议
  • USB5834数据采集卡30路模拟量采集卡DAQ卡——阿尔泰科技
  • 本地生活本地推软件有哪些?使用过程中需要关注哪些要点?
  • 三分钟总结开源流程表单的优势特点
  • C语言—字符函数和字符串函数
  • 应急响应--日志分析
  • YOLO | YOLO目标检测算法(YOLO-V1)
  • 浙大联合港中深发布AI医疗最新报告,全面审视「虚拟现实+人工智能」
  • 基于 ASP.NET的教材管理信息系统的设计与实现(最新定制开发,阿龙原创设计)✅
  • 深入理解Spring Security
  • C语言 | Leetcode C语言题解之第382题链表随机节点
  • 直播电商如何实现精细化运营,破除流量互卷的困境?
  • HTTP/1.1
  • 防泄密的方法都有哪些?
  • Mac 去除自动生成.DS_Store文件的方法
  • 通信协议——Modbus 讲明白了
  • python爬虫,使用pyppeteer异步,爬取,获得指定标签内容
  • 【lua实战】lua中pairs和ipairs的区别
  • 2、Spring手写系列-实现 Bean 的定义、注册、获取
  • 用于不平衡分类的 Bagging 和随机森林
  • CentOS 7更换YUM源为国内源的保姆级教程