P3371单源最短路径(弱化版)
一、题目描述
二、解题思路
Dijkstra的优化版,时间复杂度用优先队列优化,空间复杂度用链式前向星优化。(标准版直接交就行了)
三、代码实现
1 #include "bits/stdc++.h" 2 #define PII pair<long long,long long> 3 using namespace std; 4 const int inf = INT_MAX; 5 long long dis[100010]; 6 int vis[100100]; 7 struct node { 8 int to; 9 int from; 10 long long w; 11 }graph[300010]; 12 int fst[100100],nxt[301000]; 13 priority_queue<PII,vector<PII>,greater<PII>> que; 14 int main() 15 { 16 ios::sync_with_stdio(false); 17 cin.tie(0); 18 cout.tie(0); 19 int n,m,s; 20 cin >> n >> m >> s; 21 for(int i = 1;i <= n;i++) 22 fst[i] = -1; 23 for(int i = 1;i <= m;i++){ 24 cin >> graph[i].from >> graph[i].to >> graph[i].w; 25 nxt[i] = fst[graph[i].from]; 26 fst[graph[i].from] = i; 27 } 28 for(int i = 1;i <= n;i++) 29 dis[i] = inf; 30 for(int i = fst[s];i != -1;i = nxt[i]){ 31 dis[graph[i].to] = min(dis[graph[i].to],graph[i].w); 32 que.push(make_pair(dis[graph[i].to],graph[i].to)); 33 } 34 vis[s] = 1; 35 dis[s] = 0; 36 while(!que.empty()){ 37 PII v = que.top(); 38 que.pop(); 39 int id = v.second; 40 if(vis[id]) continue; 41 vis[id] = 1; 42 for(int j = fst[id];j != -1;j = nxt[j]) 43 if(dis[graph[j].to] > v.first + graph[j].w){ 44 dis[graph[j].to] = graph[j].w + v.first; 45 que.push(make_pair(dis[graph[j].to],graph[j].to)); 46 } 47 } 48 for(int i = 1;i <= n;i++) 49 cout << dis[i] << ' '; 50 return 0; 51 }
本文来自博客园,作者:{scanner},转载请注明原文链接:{https://home.cnblogs.com/u/scannerkk/}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具