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

网页浏览器大全seo综合查询站长工具

网页浏览器大全,seo综合查询站长工具,广州开发网站服务,易搭应用快速开发平台一、题目大意 我们有n个点,p条边,最小化从1到n之间的路径的第k1大的数(当路径不超过k时就是0) 二、解题思路 我们首先用dijkstra过一遍,判断从1能不能到n,不能直接输出-1结束。 1能到达n的话&#xff0…

一、题目大意

我们有n个点,p条边,最小化从1到n之间的路径的第k+1大的数(当路径不超过k时就是0)

二、解题思路

我们首先用dijkstra过一遍,判断从1能不能到n,不能直接输出-1结束。

1能到达n的话,就对二分第k+1大的边进行二分,left选-1,right选最大的边的长度+1(这里我left一开始选取的时最小边-1,后来发现当k比较大时结果可能是0)

二分的依据如下

设二分的值为mid
记录从1到n的路径中必走的大于mid的值的数量
如果超过了k,那么放大mid
如果小于等于k,那么缩小mid,同时记录这样不断循环,直到找到一个临界值limit
当mid=limit时,大于mid的边小于等于k个
当mid=limit-1时,大于mid的边超过k个
那么limit一定就是第k+1大的边输出最后一个(大于mid的边数小于等于k的)mid即可

三、代码

#include <iostream>
#include <algorithm>
#include <queue>
#include <vector>
using namespace std;
typedef pair<int, int> P;
vector<P> edges[1007];
bool used[1007];
int n, p, k, d[1007], inf = 0x3f3f3f3f, maxt = 0;
void input()
{int from, to, cost;scanf("%d%d%d", &n, &p, &k);for (int i = 0; i < p; i++){scanf("%d%d%d", &from, &to, &cost);edges[from - 1].push_back(P(cost, to - 1));edges[to - 1].push_back(P(cost, from - 1));maxt = max(cost, maxt);}
}
bool judgeByDijkstra(int mid)
{for (int i = 0; i < n; i++){d[i] = inf;used[i] = false;}d[0] = 0;priority_queue<P, vector<P>, greater<P>> que;que.push(P(d[0], 0));while (!que.empty()){P current = que.top();que.pop();if (used[current.second] || current.first > d[current.second]){continue;}used[current.second] = true;for (int i = 0; i < edges[current.second].size(); i++){P toEdge = edges[current.second][i];int relativeEdge = toEdge.first > mid ? 1 : 0;if (d[current.second] + relativeEdge < d[toEdge.second]){d[toEdge.second] = d[current.second] + relativeEdge;que.push(P(d[toEdge.second], toEdge.second));}}}return d[n - 1] <= k;
}
void binarySearch()
{int left = -1, right = maxt + 1;while (left + 1 < right){int mid = (left + right) / 2;if (judgeByDijkstra(mid)){right = mid;}else{left = mid;}}printf("%d\n", right);
}
bool judgeIfCanGet()
{for (int i = 0; i < n; i++){d[i] = inf;used[i] = false;}d[0] = 0;priority_queue<P, vector<P>, greater<P>> que;que.push(P(d[0], 0));while (!que.empty()){P current = que.top();que.pop();if (used[current.second] || current.first > d[current.second]){continue;}used[current.second] = true;for (int i = 0; i < edges[current.second].size(); i++){P toEdge = edges[current.second][i];if (d[current.second] + toEdge.first < d[toEdge.second]){d[toEdge.second] = d[current.second] + toEdge.first;que.push(P(d[toEdge.second], toEdge.second));}}}return d[n - 1] != inf;
}
int main()
{input();if (!judgeIfCanGet()){printf("-1\n");}else{binarySearch();}return 0;
}

http://www.yayakq.cn/news/127039/

相关文章:

  • 沈阳高端网站制作公司哪家好网站树状结构图怎么做
  • 学做网站和推广要多久网站建设系统改版
  • WordPress评论显示系统成都网站优化多少钱
  • 深圳市研发网站建设哪家好营销型网站建设 网络服务
  • 做网站中的镜像是什么设计软件免费版
  • 做网站用小动画婚庆网站名字
  • 天津做网站制作seo排名是啥
  • 郑州网站运营专业乐云seo长春seo按天计费
  • 网站跳出率怎么算网站制作步骤
  • 移动电商网站开发网站分哪些类型
  • 东莞营销网站建设公司广州网络推广机构
  • 个人网站有哪些平台国外网站如何搭建网页
  • 高级网站建设wordpress显示某一类文章
  • 网站绑定公众号虚拟云主机wordpress
  • html5期末大作业个人网站制作网站建设维护实训总结
  • 男人和女人做哪个网站证券公司如何拉客户
  • 郑州营销网站建设公司wordpress 能做门户吗
  • 网站要精细是什么意思咸宁建设网站
  • ppt成品网站专业的网站建设哪家好
  • 天津网站建设推广萍乡网站建设行吗
  • 网站系统名称是什么大学建设网站的意义
  • 郑州机械网站制作公司网站开发费计入
  • 做感恩网站的图片html菜鸟入门
  • 丰镇市网站丰镇高铁在哪个位置建设seo免费推广
  • 公司官网站怎么搞在线代理软件
  • 微网站免费软件山东网站备案时间
  • 网站推广策略如何建设一个新的网站
  • 百度如何收录网站wordpress返回顶部插件
  • 营销型外贸网站制作校园网站设计参考文献
  • 加强网站网络安全建设网络设计工资有多少