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

沙湾网站建设长沙网站优化方法

沙湾网站建设,长沙网站优化方法,网架加工安装,百度竞价排名案例分析题目大意 给定 n n n( 1 ≤ n ≤ 1 0 5 1\le n \le 10^5 1≤n≤105) 个顶点 m m m ( 1 ≤ m ≤ 5 1 0 5 1\le m \le 510^5 1≤m≤5105)条单向边,每条边都有一定的权值 w w w。然后,再给定 k k k &…

题目大意

给定 n n n 1 ≤ n ≤ 1 0 5 1\le n \le 10^5 1n105) 个顶点 m m m 1 ≤ m ≤ 5 × 1 0 5 1\le m \le 5×10^5 1m5×105)条单向边,每条边都有一定的权值 w w w。然后,再给定 k k k 1 ≤ k ≤ n 1\le k \le n 1kn)个特殊点。求出 k k k 个顶点之间两两最短路的最小值。

分析

暴力做法

k k k 个顶点,以每个顶点作为起点跑一遍最短路,然后枚举。时间复杂度为 O ( k m log ⁡ n + n 2 ) O(km\log n + n^2) O(kmlogn+n2)

优化

在面对有多个起点的最短路问题时,比较适用的方法是,建立一个虚拟源起点用边权为 0 的边去连接它们。这样,就变为了一个只有一个起点的问题。
但由于,在此问题中, k k k 个顶点不仅是起点,也是终点。所以,到达它们的最短路长度一定为 0。只有次短路,才是起点通过一些边到达终点的有效路径。不过,这也可能会出现起点与终点相同的情况。因此,我们要完成的任务是求解出的是从 k k k 个顶点出发,到达其它顶点,且起点与终点不同的次长路长度。
设从 k k k 个起点出发到达顶点 G G G 的起点与终点不同的次长路方案为:
{ a 1 , a 2 , . . . , a s , G } \{a_1,a_2,...,a_s,G\} {a1,a2,...,as,G}
能够保证的是 a 2 , a 3 , . . . , a s a_2,a_3,...,a_s a2,a3,...,as 它们不可能是 k k k 个顶点的其中一个顶点。当 a s = i a_s = i as=i i i i G G G 的邻接点),方案变为 { a 1 , a 2 , . . . , a s − 1 , i , G } \{a_1,a_2,...,a_{s-1},i,G\} {a1,a2,...,as1,i,G}
方案的属性:

  1. 目的地。子方案的目的地变为 i i i
  2. 路径长度。原方案的路径长度为子方案的路径长度 + w ( i , G ) w(i,G) w(i,G)。由于,原方案求解的是次短路。因此,子方案的路径长度求解的是最短路或次短路。
  3. 起点。不能是顶点 G G G

所以,子方案反映的问题为:起点不能是顶点 G G G ,目的地是 i i i 的最短路和次短路。

但是,对于顶点 i i i 来说,它可以是很多顶点的邻接点。因此,这将产生:起点不能是顶点 G 1 G_1 G1 G 2 G_2 G2 G 3 G_3 G3、…、 G k G_k Gk ,目的地是 i i i 的最短路和次短路的问题。即使该求解能够完成,时间复杂度也至少达到 O ( n 2 ) O(n^2) O(n2)

思维点

由于,到达 G G G 的最短路径一定为 0,已经被确定。那么实际上,我们只需要求出起点不能是顶点 G 1 G_1 G1 G 2 G_2 G2 G 3 G_3 G3、…、 G k G_k Gk ,目的地是 i i i 的最短路问题。

而上述 k k k 个问题,实际上只需要两个问题就能完成求解。

  1. 目的地是 i i i 的最短路问题。(假设它的起点是 G 1 G1 G1,那么它与其它 “起点是 G 2 , G 3 , . . . , G k G_2,G_3,...,G_k G2,G3,...,Gk” 的结果是相同的)
  2. 目的地是 i i i 但起点与最短路不同的的次短路径问题。

示例程序

#include <bits/stdc++.h>
using namespace std;
struct node {int to;long long val;int flag;bool operator< (const node& n) const {return val>n.val;}
};
const int N=1e5+10;
vector<node> G[N];
long long dis[N][2];
int vis[N][2],col[N],who[N][2];
int main() {int t;cin>>t;while (t--) {int n,m,k;scanf("%d%d%d",&n,&m,&k);for (int i=1; i<=n; i++) {G[i].clear();dis[i][0]=dis[i][1]=1e18;vis[i][0]=vis[i][1]=0;who[i][0]=who[i][1]=0;col[i]=0;}for (int i=1; i<=m; i++) {int x,y,z; scanf("%d%d%d",&x,&y,&z);G[x].push_back({y,z,0});}priority_queue<node> PQ;for (int i=1; i<=k; i++) {int x; cin>>x;col[x]=1;dis[x][0]=0;who[x][0]=x;PQ.push({x,0,0});}long long res=-1;while (!PQ.empty()) {node p=PQ.top();PQ.pop();if (col[p.to]&&who[p.to][p.flag]!=p.to) {res=p.val;break;}if (vis[p.to][p.flag]) continue;vis[p.to][p.flag]=1;int s=who[p.to][p.flag];for (int i=0; i<G[p.to].size(); i++) {int v=G[p.to][i].to;long long val=p.val+G[p.to][i].val;if (val<=dis[v][0]) {if (who[v][0]==s) {dis[v][0]=val;} else {dis[v][1]=dis[v][0];who[v][1]=who[v][0];dis[v][0]=val;who[v][0]=s;PQ.push({v,dis[v][1],1});}PQ.push({v,val,0});} else if (val<dis[v][1]) {if (who[v][0]!=s) {dis[v][1]=val;who[v][1]=s;PQ.push({v,val,1});}}}}cout<<res<<"\n";}return 0;
}
http://www.dtcms.com/wzjs/52531.html

相关文章:

  • 惠州做网站公司哪家好怎么开发自己的网站
  • b2c网站设计广州网络推广选择
  • 深圳做网站营销策略分析论文
  • 网站内容规范潍坊关键词优化平台
  • 网站建设费怎么入账seo技术网网
  • 简约风格网站建设沈阳专业seo关键词优化
  • 做英文网站挂谷歌广告网站推广怎么推广
  • 淮阴网站建设广东seo快速排名
  • 网站备案好还是不备案好做个网站需要多少钱
  • 免费自助建站系统哪个好关键词推广软件排名
  • app开发外包要多少钱seo做的比较好的公司
  • 网站自创搜索引擎营销实训报告
  • 苏州企业招聘西安百度推广优化公司
  • 福州市城乡建设委员会门户网站房地产估价师考试
  • 万网做网站多少钱网站优化平台
  • 网站开发制作学徒网络营销成功案例有哪些
  • 塑料模板seo网站编辑是做什么的
  • 九洋建设官方网站成都网站快速开发
  • 网站维护运营好做吗上海百度公司地址在哪里
  • 宝钢建设工程有限公司网站图片百度搜索
  • 专业的企业网站开发公司全国互联网营销大赛官网
  • 重庆网站开发哪家好广告网站留电话不用验证码
  • 网站抓取qq搜索引擎环境优化
  • 安徽电子学会网站建设永久免费自助建站系统
  • 怎么建设网站挣钱百度推广的渠道有哪些
  • 永年专业做网站做一个网站要花多少钱
  • 常州创新优典网站建设中国婚恋网站排名
  • 免费qq刷赞网站推广推广网站模板
  • wordpress 网站工具栏营销型网站建设报价
  • 西安政府网站建设现状百度一下移动版首页