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

怎样下载门户网站小程序开发平台官网

怎样下载门户网站,小程序开发平台官网,门户网站的流程,中能建西北城市建设门户网站题目 L2-001 紧急救援 题目描述 作为一个城市的应急救援队伍的负责人,你有一张特殊的全国地图。在地图上显示有多个分散的城市和一些连接城市的快速道路。每个城市的救援队数量和每一条连接两个城市的快速道路长度都标在地图上。当其他城市有紧急求助电话给你的时…

题目

L2-001 紧急救援

题目描述

作为一个城市的应急救援队伍的负责人,你有一张特殊的全国地图。在地图上显示有多个分散的城市和一些连接城市的快速道路。每个城市的救援队数量和每一条连接两个城市的快速道路长度都标在地图上。当其他城市有紧急求助电话给你的时候,你的任务是带领你的救援队尽快赶往事发地,同时,一路上召集尽可能多的救援队。

输入格式

输入第一行给出 4 4 4 个正整数 N 、 M 、 S 、 D N、M、S、D NMSD,其中 N N N 2 ≤ N ≤ 500 2≤N≤500 2N500)是城市的个数,顺便假设城市的编号为 0 0 0 ~ ( N − 1 ) (N−1) (N1) M M M 是快速道路的条数; S S S 是出发地的城市编号; D D D 是目的地的城市编号。

第二行给出 N N N 个正整数,其中第 i i i 个数是第 i i i 个城市的救援队的数目,数字间以空格分隔。随后的 M M M 行中,每行给出一条快速道路的信息,分别是:城市 1 1 1、城市 2 2 2、快速道路的长度,中间用空格分开,数字均为整数且不超过 500 500 500。输入保证救援可行且最优解唯一。

输出格式

第一行输出最短路径的条数和能够召集的最多的救援队数量。第二行输出从 S S S D D D 的路径中经过的城市编号。数字间以空格分隔,输出结尾不能有多余空格。

输入样例

4 5 0 3
20 30 40 10
0 1 1
1 3 2
0 3 3
0 2 2
2 3 2

输出样例

2 60
0 1 3

解题思路

这道题目是一个典型的最短路径问题,但不仅仅是求最短路径,还需要考虑在最短路径的基础上,统计最短路径的数目以及尽可能多地召集救援队。因此,我们需要在Dijkstra算法的基础上进行一些扩展。

Dijkstra算法回顾

Dijkstra算法是一种用于求解单源最短路径的经典算法。它的基本思想是从起点开始,逐步扩展到其他节点,每次选择当前距离起点最近的节点,并更新其邻居节点的距离。

本题的扩展

在本题中,我们不仅需要找到最短路径,还需要:

  1. 统计最短路径的条数:即从起点到终点的最短路径有多少条。
  2. 在最短路径的基础上,选择救援队数量最多的路径:即在多条最短路径中,选择救援队数量最多的那条。

为了实现这些功能,我们需要在Dijkstra算法的基础上增加一些额外的信息:

  • cnt[i]:表示从起点到城市i的最短路径条数。
  • nums[i]:表示从起点到城市i的最短路径上能够召集的救援队数量。
  • pre[i]:表示在最短路径中,城市i的前驱节点,用于最后输出路径。

代码实现

#include<bits/stdc++.h>
using namespace std;void solve() {int n, m, s, d;cin >> n >> m >> s >> d;// 每个城市的救援队数量vector<int> w(n);for (int i = 0; i < n; ++i)cin >> w[i];// 图的邻接矩阵表示,初始化为无穷大vector<vector<int>> g(n, vector<int>(n, 0x3f3f3f3f));for (int i = 0; i < m; ++i) {int a, b, c;cin >> a >> b >> c;g[a][b] = g[b][a] = c;  // 无向图}// Dijkstra算法的初始化vector<int> vis(n, 0);  // 标记是否访问过vector<int> cnt(n, 0);  // 最短路径条数vector<int> nums(n, 0); // 救援队数量vector<int> dist(n, 0x3f3f3f3f);  // 最短距离vector<int> pre(n, -1);  // 前驱节点dist[s] = 0;  // 起点到自己的距离为0cnt[s] = 1;   // 起点到自己的最短路径条数为1nums[s] = w[s];  // 起点到自己的救援队数量为w[s]// Dijkstra算法主循环for (int i = 0; i < n; ++i) {int x = -1;// 找到当前未访问的节点中距离起点最近的节点for (int j = 0; j < n; ++j) {if (!vis[j] && (x == -1 || dist[x] > dist[j]))x = j;}if (x == -1) break;  // 所有节点都已访问vis[x] = 1;  // 标记为已访问// 更新邻居节点的距离for (int j = 0; j < n; ++j) {if (dist[j] > dist[x] + g[x][j]) {dist[j] = dist[x] + g[x][j];cnt[j] = cnt[x];  // 有更优的最短路径,直接更新最短路径条数nums[j] = nums[x] + w[j];  // 有更优的最短路径,直接更新救援队数量pre[j] = x;  // 更新前驱节点} else if (dist[j] == dist[x] + g[x][j]) {cnt[j] += cnt[x];  // 当前更新的距离和先前更新的最短路径距离一致,增加最短路径条数if (nums[j] < nums[x] + w[j]) {nums[j] = nums[x] + w[j];  // 距离一致情况下,取最大救援队数量pre[j] = x;  // 取最大救援队数量路径,同时更新前驱节点}}}}// 输出最短路径数目以及救援队数目最大的结果cout << cnt[d] << ' ' << nums[d] << '\n';// 输出路径vector<int> path{d};int idx = d;while (idx != s) {idx = pre[idx];path.push_back(idx);}// 逆序输出路径for (int i = path.size() - 1; i >= 0; i--)cout << path[i] << " \n"[i == 0];
}int main() {cin.tie(nullptr), cout.tie(nullptr);ios::sync_with_stdio(false);solve();return 0;
}
http://www.dtcms.com/wzjs/18965.html

相关文章:

  • asp做的网站数据库在哪里建站之星网站
  • 做调查问卷能赚钱的网站网站建设方案书范文
  • 有什么做视频的免费素材网站淘宝店铺运营
  • 用flash做的网站有哪些百度收录网站链接入口
  • 创业给企业做网站开发百度平台客服联系方式
  • 安通建设有限公司网站重庆百度推广关键词优化
  • 四川微信网站建设公google浏览器官网入口
  • 企业管理软件开发平台上海seo优化
  • 织梦做响应式网站seo数据监控平台
  • 怎么做直播网站刷弹幕乔拓云建站平台
  • 网站建设数据库怎么选择百度快速优化软件
  • 怎么在网站上添加地图自己怎么做一个网页
  • 网站设计公司排名知乎网站推广软件费用是多少
  • wordpress 实例农大南路网络营销推广优化
  • 网站怎么做排查修复安卓优化大师app
  • 页面简洁的网站by72777最新域名查询
  • 网站制作与网站建设内容企业推广
  • 自己做网站好还是购买网站好石家庄最新新闻事件
  • 汕头做网站费用市场调研分析报告模板
  • 哪些网站可以做团购武汉seo主管
  • 珠海市 网站建设网络舆情处置的五个步骤
  • 番禺网站制作价格nba排名西部和东部
  • 中国建设银行启东市支行网站官网百度
  • 鲁中网站怎么做网站排名
  • 官方网站怎么制作网络营销论文题目
  • 日本做H网站怎样把个人介绍放到百度
  • 网站建设相关图片销售平台
  • 大连建站价格柳州今日头条新闻
  • 企业开发网站建设哪家好上海高玩seo
  • 上海一网武汉seo培训