博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
TopCoder SRM 642 Div.2 1000 --二分+BFS
阅读量:5055 次
发布时间:2019-06-12

本文共 1356 字,大约阅读时间需要 4 分钟。

题意: 给你一张图,N个点(0~N-1),m条边,国王要从0到N-1,国王携带一个值,当走到一条边权大于此值的边时,要么不走,要么提升该边的边权,提升k个单位花费k^2块钱,国王就带了B块钱,问能携带的最大值是多少。

解法:  二分此值,然后BFS跑遍每个点,记录到达每个点的最小花费Mincost,如果Mincost[N-1] <= B,则此值可行,往上再二分,否则往下二分。

比赛时候本来我的二分方法应该返回high的,结果返回low,怎么都过不了样例,比赛完才发现此处的问题。  真是太弱。

代码:

#include 
#include
#include
#include
#include
#include
#include
#include
#define ll long longusing namespace std;struct node{ int u; long long cost;};class TallShoes{public: long long mp[55][55],Mincost[55]; int N; bool bfs(int N,int S,int E,long long hei,long long B) { int i; Mincost[0] = 0; for(i=1;i
que; node now; now.u = S; now.cost = 0; que.push(now); while(!que.empty()) { node tmp = que.front(); que.pop(); int u = tmp.u; long long cost = tmp.cost; for(i=0;i
= 10000000000000000LL) continue; if(mp[u][i] >= hei) { if(Mincost[i] > cost) { Mincost[i] = cost; now.u = i, now.cost = Mincost[i]; que.push(now); } } else { long long dif = hei-mp[u][i]; if(Mincost[i] > cost + dif*dif) { Mincost[i] = cost + dif*dif; now.u = i, now.cost = Mincost[i]; que.push(now); } } } } if(Mincost[E] <= B) return true; return false; } int maxHeight(int N, vector
X, vector
Y, vector
height, long long B) { for(int i=0;i
View Code

 

转载于:https://www.cnblogs.com/whatbeg/p/4169116.html

你可能感兴趣的文章
Cognos报表打开参数
查看>>
126邮箱的格式
查看>>
ASP.NET MVC上传文件 未显示页面,因为请求实体过大。解方案
查看>>
怎样在 Mac 上打开 ~_Library 文件夹
查看>>
git常用的命令
查看>>
【转】emulator: ERROR: Could not load OpenGLES emulation library: lib64OpenglRender.so
查看>>
团队编程项目作业3-----模块开发过程
查看>>
站台查询api 据站台名称查询站台详细信息
查看>>
恶意代码功能与应对
查看>>
设置Intel网卡以抓取报文的vlan tag
查看>>
开源实时消息推送系统 MPush
查看>>
phpstorm问题
查看>>
HDU 6214【最少的最小割边数】
查看>>
J2EE的13个规范总结
查看>>
软件行业40岁前摸索出路,介绍小型软件项目是否可以收辛苦费?事实验证这个路子行不通...
查看>>
[转]浏览器是怎样工作的:渲染引擎,HTML解析
查看>>
使用Hexo搭建GitPage
查看>>
树莓派搭建网站
查看>>
并查集 POJ 1988
查看>>
C#执行sql文件
查看>>