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

兰州北山生态建设局网站国内做seo最好的公司

兰州北山生态建设局网站,国内做seo最好的公司,网站层次,wordpress数据库地址文章目录一、题目1、原题链接2、题目描述二、解题报告1、思路分析2、时间复杂度3、代码详解三、知识风暴Dijkstra算法一、题目 1、原题链接 1488. 最短距离 2、题目描述 有 N 个村庄,编号 1 到 N。 村庄之间有 M 条无向道路,第 i 条道路连接村庄 ai 和村…

文章目录

  • 一、题目
    • 1、原题链接
    • 2、题目描述
  • 二、解题报告
    • 1、思路分析
    • 2、时间复杂度
    • 3、代码详解
  • 三、知识风暴
  • Dijkstra算法

一、题目

1、原题链接

1488. 最短距离

2、题目描述

有 N 个村庄,编号 1 到 N。

村庄之间有 M 条无向道路,第 i 条道路连接村庄 ai 和村庄 bi ,长度是 ci。

所有村庄都是连通的。

共有 K 个村庄有商店,第 j 个有商店的村庄编号是 xj。

然后给出 Q 个询问,第 k 个询问给出一个村庄的编号 yk,问该村庄距离最近的商店有多远?

输入格式

第一行包含两个整数 N,M。

接下来 M 行,每行包含三个整数 ai,bi,ci,表示第 i 条道路连接村庄 ai 和村庄 bi,长度是 ci。

再一行包含整数 K。

接下来 K 行,每行包含一个整数 xj,表示第 j 个有商店的村庄编号是 xj。

再一行包含整数 Q。

接下来 Q 行,每行包含一个整数 yk,表示询问编号为 yk 的村庄与其距离最近的商店之间的距离。

输出格式

对于每个询问,输出该询问的结果。

数据范围

2≤N≤105,N−1≤M≤min(N(N−1)/2,105),1≤Q≤105,1≤K≤N,1≤ci≤10000

输入样例

7 7
1 2 5
1 4 3
2 3 2
2 5 1
3 6 7
5 6 8
6 7 6
3
7
5
4
7
1
2
3
4
5
6
7

输出样例

3
1
3
0
0
6
0

二、解题报告

1、思路分析

思路来源:y总讲解视频
y总yyds

(1)将每个商店看做起点,在图中添加一个虚拟源点(起点),该点到其后面所有商店的距离均为0(有向边),则可以将从村庄走到商店的最短路径转化为从村庄走到源点(也就是从源点到村庄)的最短路径,两者等价。
(2)模拟上述过程,求从虚拟源点到村庄的最短路径,即为从村庄到商店的最短路径。

2、时间复杂度

时间复杂度为O(mlogn)(n表示点数,m表示边数)

3、代码详解

#include <iostream>
#include <queue>
#include <cstring>
#include <utility>
using namespace std;
typedef pair<int,int> PII;
const int N=100010,M=3*N;   //N代表点数,M代表边数,因需要为每个起点添加一条由虚拟源点指向的边,所以开成点数3倍
int dist[N];                //存储每个点到虚拟源点的最短路径
int h[N],e[M],w[M],ne[M],idx;   //h[]存储每个点第一条边的idx,e[]存储每条边的终点,ne[]存储每条边同起点的下一条边的idx,idx存储边的编号
bool st[N];
int n,m;
//邻接表中添加一条边
void add(int a,int b,int c){e[idx]=b;w[idx]=c;ne[idx]=h[a];h[a]=idx++;
}
//堆优化dijkstra求最短路
int dijkstra(){memset(dist,0x3f,sizeof dist);priority_queue<PII,vector<PII>,greater<PII>> heap;dist[0]=0;heap.push({0,0});while(!heap.empty()){PII t=heap.top();heap.pop();int ver=t.second;if(st[ver]) continue;st[ver]=true;for(int i=h[ver];i!=-1;i=ne[i]){int j=e[i];if(dist[j]>dist[ver]+w[i]){dist[j]=dist[ver]+w[i];heap.push({dist[j],j});}}}if(dist[n]==0x3f3f3f3f) return -3;else return dist[n];
}
int main(){cin>>n>>m;memset(h,-1,sizeof h);while(m--){int a,b,c;cin>>a>>b>>c;add(a,b,c);add(b,a,c);}int k;cin>>k;while(k--){int x;cin>>x;add(0,x,0);      //添加一个虚拟源点到每个商店距离为0的有向边}dijkstra();int q;cin>>q;while(q--){int y;cin>>y;cout<<dist[y]<<endl;}return 0;
}

三、知识风暴

Dijkstra算法

  • 基本思想:将一个带权有向图中的顶点分成两组,一组是未确定最短路的,一组是已确定最短路的。每次将未确定最短路集合中的点,按照与源点的距离递增加入已确定最短路的集合中,同时每次往已确定最短路集合中加入一个点后,需要用这个点来更新其他点距离源点的距离。当所有点的最短路都已确定,算法结束。
http://www.sczhlp.com/news/124790/

相关文章:

  • 做评选活动的网站哪些网站可以上传自己做的视频
  • 麻城做网站erp生产管理系统
  • seo关于网站搜索有哪些做农产品的网站
  • 温州高端网站定制通过高权重网站做长尾关键词
  • dede一键更新网站企业解决方案图片
  • 网站动态页面怎么做平湖市建设局网站
  • 免费帮朋友做网站网页设计与制作教程 pdf
  • 怎么给网站命名一级A做爰片安全网站
  • 在什么网站做公司人员增减创建公司网站需要什么
  • dm建站系统北京建筑公司一览表
  • 湘潭市建设网站服装网站ui设计
  • 重庆企业网站开发方案如何做好网络宣传工作
  • 深圳H5网站开发网站标准规范建设
  • 关于港口码头发展建设的网站网络科技公司 网站建设
  • 茶网站源码腾讯低代码开发平台
  • 网站开发质量控制计划书电子商务网站名字
  • 团购网站营销方案神箭手wordpress免费吗
  • 202312_DASCTF_蚁剑流量
  • 网页开发入门:CSS与JS基础及BS/CS架构解析 - 实践
  • 购物网站素材亳州网站建设公司
  • 温州 网站 公司什么科技网站建设
  • 北京网站排名公司网站建设的市场容量
  • 大连住建部官网东莞百度seo新网站快速排名
  • 商业网站开发入门选课网站建设及相关流程
  • 做官方网站公司网站推广策划执行方案
  • 中国建设银行官方网站诚聘英才网站被收录 但搜索不到主页
  • 做赚钱的网站有哪些wifi优化大师下载
  • 实用指南:Vue开发准备
  • 网站模板下载 免费网站搭建报价单
  • php做的静态网站怎么加密网络营销服务商有哪些