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

单源最短路径【东北大学oj数据结构12-2/3】C++

题面

对于给定的加权图 G=(V,E),找到从源到每个结点的最短路径。 对于每个结点 u,打印从结点 0 到 u 的最短路径上边的总权重。

输入

在第一行中,给出了一个整数 n,表示 G 中的结点数。
在接下来的n行中,每个结点u的邻接表分别以如下格式给出:
u k v1​ c1​ v2​ c2​ ... vk​ ck​
其中:
G 中的结点从 0 ~ n-1 编号。
u 是目标结点的 ID,k 表示它的度数。
vi​(i=1,2,...k) 表示与 u 相邻的结点的 ID,ci​ 表示连接 u 和 vi​(从 u 到 vi​)的有向边的权重。

输出

对于每个结点,分别在一行中打印其 ID 和距离(使用空格分隔)。
注意,需按结点 ID 的顺序打印。

约束

1≤n≤100
0≤ci​≤100,000
|E|≤10,000
所有结点都可以从结点 0 到达

输入样例

5
0 3 2 3 3 1 1 2
1 2 0 2 3 4
2 3 0 3 3 1 4 1
3 4 2 1 0 1 1 4 4 3
4 2 2 1 3 3

输出样例

0 0
1 2
2 2
3 1
4 3 

#include <iostream>
#include <vector>
#include <queue>
#include <climits>
using namespace std;
typedef pair<int,int> pii;
void dijkstra(int n,const vector<vector<pii>>& adj)
{
    vector<int> dist(n,INT_MAX);
    dist[0]=0;
    priority_queue<pii,vector<pii>,greater<pii>> pq;
    pq.push({0,0});
    while(!pq.empty())
    {
        int u=pq.top().second;
        int d=pq.top().first;
        pq.pop();
        if(d>dist[u]) continue;
        for(int i=0;i<adj[u].size();i++)
        {
            int v=adj[u][i].first;
            int weight=adj[u][i].second;
            if(dist[u]+weight<dist[v])
            {
                dist[v]=dist[u]+weight;
                pq.push({dist[v],v});
            }
        }
    }
    for(int i=0;i<n;i++)
    {
        cout<<i<<" "<<dist[i]<<endl;
    }
}
 
int main() {
    int n;
    cin >> n;
   vector<vector<pii>> adj(n);
    for(int i=0;i<n;i++)
    {
        int u,k;
        cin>>u>>k;
        for(int j=0;j<k;j++)
        {
            int v,c;
            cin>>v>>c;
            adj[u].push_back({v,c});
        }
    }
    dijkstra(n,adj);
    return 0;
}

 


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

相关文章:

  • weblogic安装 12.2.1.4.0 单机
  • Elasticsearch Serverless中的数据流自动分片深度解析
  • 电脑里msvcr120.dll文件丢失怎样修复?
  • 【Leetcode 热题 100】74. 搜索二维矩阵
  • FPGA、STM32、ESP32、RP2040等5大板卡,结合AI,更突出模拟+数字+控制+算法
  • Jellyfin播放卡顿,占CPU的解决方法
  • 【JAVA】java中将一个list进行拆解重新组装
  • Kafka集群的常用命令与策略
  • 从室内到室外:移动机器人的环境适应之旅
  • 企业级网络运维管理系统:构建高效与稳定的基石
  • 电化学气体传感器在物联网中的精彩表现
  • 文本表征的Scaling Laws:Scaling Laws For Dense Retrieval
  • 02.01、移除重复节点
  • 【Ubuntu】安装华为的MindSpore
  • 2、pycharm常用快捷命令和配置【持续更新中】
  • Jetpack Compose 学习笔记(一)—— 快速上手
  • 智能边缘计算×软硬件一体化:开启全场景效能革命新征程(企业开发者作品)
  • kafka小实站
  • SASS 简化代码开发的基本方法
  • AcWing练习题:平均数2
  • 肿瘤免疫循环与肿瘤免疫治疗的关系
  • 《Vue3实战教程》39:Vue3无障碍访问
  • 初学stm32 --- FSMC驱动LCD屏
  • XML里预定义的字符实体引用
  • graylog+sidecar通过docker-compose部署并采集SSH登录日志
  • C++中的常见关键字