C++课后习题训练记录Day144

📅 2026/6/30 21:58:45
C++课后习题训练记录Day144
1.练习项目 问题描述小明是蓝桥王国的王子今天是他登基之日。在即将成为国王之前老国王给他出了道题他想要考验小明是否有能力管理国家。题目的内容如下蓝桥王国一共有 N 个建筑和 M 条单向道路每条道路都连接着两个建筑每个建筑都有自己编号分别为 1∼N 。其中皇宫的编号为 1国王想让小明回答从皇宫到每个建筑的最短路径是多少但紧张的小明此时已经无法思考请你编写程序帮助小明回答国王的考核。输入描述输入第一行包含两个正整数 N,M。第 2 到 M1 行每行包含三个正整数 u,v,w表示 u→v 之间存在一条距离为 w 的路。1≤N≤3×1051≤m≤1061≤ui,vi≤N0≤wi≤109。输出描述输出仅一行共 N 个数分别表示从皇宫到编号为 1∼N 建筑的最短距离两两之间用空格隔开。如果无法到达则输出 −12.选择课程在蓝桥云课中选择题库选择题号1122并开始练习。3.开始练习1源码 #includebits/stdc.husing namespace std;using ll long long;const ll N 3e510;const ll inf 2e18;struct Node{ll x,w;bool operator (const Node u)const{return wu.w?xu.x:wu.w;}};vectorNodeg[N];ll d[N];int n,m;void dijstra(int st){for(int i1;in;i)d[i]inf;bitsetNvis;priority_queueNodepq;pq.push({st,d[st]0});while(pq.size()){int xpq.top().x;int wpq.top().w;pq.pop();if(vis[x])continue;vis[x]true;//拓展for(const auto [y,dw]:g[x]){if(d[x]dwd[y]){d[y]d[x]dw;pq.push({y,d[y]});}}}}int main(){ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);cinnm;while(m--){int x,y,w;cinxyw;g[x].push_back({y,w});}dijstra(1);for(int i1;in;i){cout(d[i]inf?-1:d[i]) ;}return 0;}2检验结果对此代码进行检验检验后无报错提交此代码判题结果为正确100分。3练习心得注意每段代码末尾的分号是否存在 如不存在则需即使补充输入法 是否切换 为英语模式语法是否错误。