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

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


http://www.mrgr.cn/news/8947.html

相关文章:

  • docker映射了端口,宿主机不生效
  • @RequestBody:Spring MVC中的请求体解析利器
  • hal DMA
  • Elasticsearch 8 RAG 技术分享
  • Java笔试面试题AI答之集合(3)
  • 工厂现场多功能帮手,三防平板改善管理体验
  • thinkphp8 定时任务 addOption
  • 详谈进程等待
  • 嵌入式音视频码率控制及分享个工作遇到的类似问题
  • 实用工具:[TrafficMonitor]任务栏电脑性能监控安装指南
  • 001 Routing and Switching(路由与交换)基础概念入门
  • Azure OpenAI citations with message correlation
  • npm install报错,解决记录
  • 声卡OTG:数字音频传输的新纪元
  • Spring Cloud(面试篇)
  • [mysql][sql]安装完mysql8跨主机不能访问解决办法
  • 微信小游戏授权问题
  • 从零基础学Go(九)——Go的Goroutine
  • qt-PLC可视化编辑器
  • Flink 单机部署