题目链接:点击查看

题目大意:给出一个无环无向图,以及k,定义答案是点1到点n的任意一条路径上,所经过的所有边的权值中的第k大值,求答案的最小值。(题目是中文题面,没看懂大意可以直接去看原题目。。)

题目分析:因为是要求权值中的最值,不是求最短路是多少,所以一开始想到的是最小生成树,然后从大到小减去K个值,就是答案了,可惜的是,最小生成树的话,不一定会包括最优解,随便举个反例,如果我们的k是1,就是需要删掉一个边后的最大值,那么有两条路径,一条是1,2,9,还有一条是3,3,3,很显然最小生成树会选择第二组边来生成树,而不是第一组边,但是选择第一组边的路径答案是2,第二组的答案是3,故思路明显错误。

然后就要考虑最短路了,毕竟给了一个图,而且还有权值,题目给了1秒的时间,那么暴力肯定是不行的(虽然暴力我也没有思路。。),我们可以注意到,每个边的权值非常小,只有1e6,平常的最短路权值都不会考虑到时间复杂度中去,所以直接给1e9方便,所以我们自然而然可以想到对权值下手,1e6的话如果只是O(n)的话也离超时不远了,所以考虑一下logn的算法,好吧,是我队友想出来的,可以二分一下权值,因为答案也是要求输出一个值,正好就是需要输出权值,那么我们二分权值后,在迪杰斯特拉中稍微一做修改,就能求出从1到n这条路上需要删除掉几条边才能让答案满足我们二分的答案,然后根据这个写一个check函数,配合上迪杰斯特拉,总时间复杂度就是n*logn*logw了,没仔细算,不过肯定很小,因为n只有1000,

直接上代码了,更多的注释中解释:

#include<iostream>
#include<string>
#include<cstring>
#include<cstdio>
#include<algorithm>
#include<climits>
#include<cmath>
#include<cctype>
#include<stack>
#include<queue>
#include<list>
#include<vector>
#include<set>
#include<map>
#include<unordered_map>
using namespace std;typedef long long LL;const int inf=0x3f3f3f3f;const int N=1e3+100;int limit;int n,m,k;struct Node//Node结构体两个用途,一个是优先队列用,一个是邻接表用
{int to,w;Node(int TO,int W){to=TO;w=W;}bool operator<(const Node& a)const//注意优先队列的运算符重载是相反的{return w>a.w;}
};vector<Node>node[N];int d[N];bool vis[N];void Dijkstra()
{for(int i=1;i<=n;i++){d[i]=inf;vis[i]=false;}priority_queue<Node>q;d[1]=0;q.push(Node(1,0));while(!q.empty()){Node temp=q.top();q.pop();if(vis[temp.to])continue;vis[temp.to]=true;int u=temp.to;for(int i=0;i<node[u].size();i++){Node tem=node[u][i];int v=tem.to;int w=tem.w;if(w>limit)//如果该边的权值大于二分的权值,则令权值为1(表示需要删除),否则为0w=1;elsew=0;if(d[v]>d[u]+w){d[v]=d[u]+w;q.push(Node(v,d[v]));}}}
}bool check(int x)
{limit=x;Dijkstra();return d[n]<=k;
}int main()
{scanf("%d%d%d",&n,&m,&k);while(m--){int u,v,w;scanf("%d%d%d",&u,&v,&w);node[u].push_back(Node(v,w));node[v].push_back(Node(u,w));}limit=1e6+100;Dijkstra();if(d[n]==inf)return 0*printf("-1\n");int l=0;int r=1e6;int ans;while(l<=r){int mid=l+r>>1;if(check(mid)){ans=mid;r=mid-1;}else{l=mid+1;}}cout<<ans<<endl;return 0;
}

中石油训练赛 - 小说(最短路+二分)相关推荐

  1. 中石油训练赛 - High Load Database(二分+记忆化)

    题目链接:点击查看 题目大意:给出一个长度为 n 的数列,再给出 m 次询问,每次询问给出一个阈值 x ,问最少将数列分割成多少段,可以使得每一段的总和都不超过 x,无解的话输出 Impossible ...

  2. 中石油训练赛 - Bouldering(最短路+剪枝)

    题目大意:给出一个 n * m 的矩阵,矩阵中有些许数字,两个数字之间的距离如果小于 r 的话就是可达,到达一个数字后会消耗数字对应的体力值,问从最下面的数字到最上面的数字的最短路是多少,必须要保证体 ...

  3. 中石油训练赛 - Get Strong(dfs双向搜索+二分)

    题目大意:给出 n 个武器,每个武器可以升级最多 k[ i ] 次,每次升级需要花费 c[ i ][ j ] 个单位的金币,性能可以提升 w[ i ][ j ] 个单位,现在给出 m 个金币,问如何分 ...

  4. 中石油训练赛 - Fermat‘s Optimization Problem(Java高精度运算+二分)

    题目大意:给出误差函数 ,现在给出 z 和 n,要求求出 x 和 y ,使得函数 F 的取值最小 题目分析:首先数据范围是幂次级别的,1e5 的 10 次方,也就是 1e50 次方,需要用到大数,我用 ...

  5. 中石油训练赛 - Historical Maths(二分)

    题目大意:给出三个十进制下的数字 A ,B ,C ,问是否存在一个 k ,满足在 k 进制下有 A * B = C 题目分析:需要观察出进制与 A * B 和 C 的大小之间具有单调性,如果进制较小的 ...

  6. 中石油训练赛 - Trading Cards(最大权闭合子图)

    题目大意:给出 n 个卡片,可以自由买卖,且价格都是相同的,再给出 m 个集合,如果已经得到了其中一个集合中的卡片,那么可以获得该集合的收益,问如何操作可以使得收益最大化 题目分析:最大权闭合子图的模 ...

  7. 中石油训练赛 - Watch Later(状压dp)

    题目链接:点击查看 题目大意: 给出一个长度为 n 的字符串,字符串中共有 k 种不同的字符,现在问删除掉所有字符的最小操作数,对于每种字符需要确定一个先后顺序,每次需要删除掉当前所有的这种字符才能去 ...

  8. 中石油训练赛 - Swapping Places(字典序最小的拓扑排序)

    题目链接:点击查看 题目大意:给出 s 个字符串表示种类,再给出 m 个朋友关系,表示两个种类的动物是朋友,现在给出一个长度为 n 的种类排列,规定相邻两个是朋友的种类的动物可以交换位置,问如何操作, ...

  9. 中石油训练赛 - Gone Fishing(固定大小的圆可以覆盖最多的点)

    题目大意:在二维平面中给出 n 个点,再给出一个固定大小的圆,问如何放置这个圆可以使其覆盖最多的点 题目分析:首先不难想到一种 n^3 的做法,就是两层循环去枚举两个点,因为两个不同的点就可以确定下来 ...

最新文章

  1. 基于SP4062电路IO接口八通道保护板
  2. python 复制、移动文件到指定目录并修改名字
  3. 【Linux】服务器常用命令
  4. 简述深度学习预训练和正则化
  5. easypoi needmerge失效_EasyPOI简单用例,简单有效
  6. 数据科学项目_完整的数据科学组合项目
  7. 树链剖分之点剖分(点分治)讲解
  8. 计算机控制技术微课,课程名称:微型计算机控制技术课程
  9. 听说股票是暴利?花了一晚上时间,用Python写了个股票提醒系统
  10. 《Python机器学习及实践:从零开始通往Kaggle竞赛之路》第1章 简介篇 学习笔记(一)1.1机器学习综述、1.2Python编程库、1.3Python环境配置总结
  11. c++11 regex
  12. 《让子弹飞》系列——去浦东的老三
  13. 2019CISCN web题赛-JustSoSo;love_math(复现)
  14. java实现高斯日记
  15. 北京金普蝶:让客户满意就是最好的营销!
  16. arm64服务器性能,80核ARM服务器有多恐怖 性能比64核霄龙还强
  17. [BUG 记录] Unable to determine the device handle for GPU 0000:05:00.0: GPU is lost. Reboot the system
  18. 4.集成学习之0.Voting
  19. 关于ie下阻止ActiveX控件
  20. iOS提交版本时苹果官方审核拒绝原因详解

热门文章

  1. Nginx server_name精确匹配配置
  2. EventLoopGroup 与Reactor 关联
  3. 字符缓冲流特有功能复制Java文件
  4. AOP日志-后置通知
  5. Spring七中传播行为详解
  6. oracle最大空闲时间,使用Oracle PROFILE控制会话空闲时间
  7. 深入浅出extjs第2版_LINGO实例教程第2版第2期上线
  8. webflux系列--基础
  9. python导出数据找不到csv_找不到Python/CSV文件
  10. 【报错笔记】eclipse启动出现错误