最新要闻
- 马斯克给全球车主发福利:每人可“白嫖”30天免费EAP试用服务
- 阵容十分豪华 2023最受期待的十大游戏来了:暗黑4位列第三
- 首发天玑8100:荣耀平板V8 Pro带来超级笔记 自动去广告
- 起点读书宣布百部经典作品限时免费:包括《诛仙》《红楼梦》等
- 世界热点!男子修车时发现4S店虚报维修定损金额 要求退一赔三胜诉
- 每日动态!2023春运车票24日开售 除夕车票要等到1月7日
- 《妮姬》首月收入突破6.9亿!腾讯海外收入占比提升达12.5%
- 今日热门!超越电竞机!Redmi K60要榨干第二代骁龙8:画质、帧率、亮度三不降
- 每日精选:效果堪比镀铬 2.2万元的特斯拉Model Y新配色值不值?
- Intel拆分GPU部门 一把手重回技术岗 累计亏损超20亿美金
- 天天通讯!iPhone 14 Pro爆出“闪线门” :屏幕出现诡异的绿色和黄色细横线
- 全球热点评!当ChatGPT遇上弱智吧:全程爆笑
- 夫妻的世界翻拍哪部电视剧?夫妻的世界最后结局是什么意思?
- 滕王阁为什么叫阁不叫楼?滕王阁为什么是三大名楼之首?
- 情非情砸车是第几集?情非情盖总和保姆的结局是什么?
- 小昭去波斯是哪一集?小昭去波斯后她母亲去哪儿了?
手机
iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?
警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案
- iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?
- 警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案
- 男子被关545天申国赔:获赔18万多 驳回精神抚慰金
- 3天内26名本土感染者,辽宁确诊人数已超安徽
- 广西柳州一男子因纠纷杀害三人后自首
- 洱海坠机4名机组人员被批准为烈士 数千干部群众悼念
家电
微头条丨AcWing341. 洛谷P1073, NOIP2009 最优贸易
(资料图片)
AcWing题目传送门洛谷题目传送门
题目大意
\(~~~~~~\)一个投机倒把的奸商想要通过城市不太健全的贸易系统坑点钱,任意城市都可以买入或者卖出水晶球,他想尽量在便宜的城市买入,在贵的城市卖出,以此赚取更高的差价,他必须从一号城市开始旅行,到\(n\)号城市结束。请问他最多可以赚多少钱?
解题思路
\(~~~~~~\)这题乍一看貌似是毫无头绪的,但是我们可以通过差价高推出,他应该价格尽量低买入,价格尽量高的卖出,所以我们可以在从\(1\sim n\) 的路径中选择一个分界点,记作\(k\),这个\(k\)点的含义就是奸商决定在\(1\sim k\)的城市中买入,\(k\sim n\)中的城市卖出,基于我们的买入尽量低,卖出尽量高原则,我们可以得到我们的基本思路:
\(~~~~~~\)枚举所有的\(k\)点,找出\(1\sim k\)中需要的价格最小的点(有路径可以到达的),用\(dmin\)数组记录, 再找出\(k\sim n\)中需要的价格最大的点(存在到\(n\)的路径的),用\(dmax\)数组记录,最后统计答案时找出\(dmax_{i}-dmin_{i}\) 的值最大的点
具体实现
\(~~~~~~\)怎么找出\(1\sim k\)中的最小点呢,难道是枚举每条\(a_{i}\sim k(\forall a_{i}\in [1,k])\)的路中最便宜的点吗?这样未免也太慢了。我们可以采用\(SPFA\)算法,枚举从\(1\)开始的单源最短路(这里最短路的松弛操作需要略做改动),这样对于\(\forall k\in [1,n]\),所有的最短距离都计算好了。
对于\(k\sim n\)的最大点我们也采用类似以上的做法:\(~~~~~~\)我们枚举从\(k\)开始的最短路,松弛操作同样改动,那我们就可以算出\(\forall k\in [1,n]\)到\(n\)点的最大价值了。但是这样需要做\(n\)遍\(SPFA\),一定是不能再时间上通过的,所以该算法应该经过一点改进。
\(~~~~~~\)经过观察可以发现所有的汇点都是\(n\),我们就可以自然地建一个反图(将所有的边方向反转),这样子反图上跑出来的以\(n\)为源点的最长路,就是原图上各点到\(n\)的最长路了。
对于代码
\(~~~~~~~~~~~~~~~~~~~~~~~~\)我们可以写两个\(SPFA\),一个求最短路,一个求最长路\(~~~~~~~~~~~~~~~~~~~~~~~~\)也可以合并处理,这里两份代码都放上来了
代码
两个\(SPFA\)
#include #include #include using namespace std;const int N = 3e5 + 10, M = 2e6 + 10, INF = 0x3f3f3f3f;int dmax[N], dmin[N], st[N];int h[N], rh[N], e[M], ne[M], w[N], idx;int n, m;void add(int *h, int a, int b) { e[idx] = b, ne[idx] = h[a], h[a] = idx ++ ;}void spfa() { queue q; memset(st, 0, sizeof st); memset(dmin, 0x3f, sizeof dmin); dmin[1] = w[1], st[1] = true, q.push(1); while (q.size()) { auto t = q.front(); q.pop(); st[t] = false ; for (int i = h[t]; ~i; i = ne[i]) { int j = e[i]; if (dmin[j] > min(dmin[t], w[j])) { dmin[j] = min(dmin[t], w[j]); if (!st[j]) st[j] = true, q.push(j); } } }}void rspfa() { queue q; memset(st, 0, sizeof st); memset(dmax, 0xcf, sizeof dmax); dmax[n] = w[n], st[n] = true, q.push(n); while (q.size()) { auto t = q.front(); q.pop(); st[t] = false ; for (int i = rh[t]; ~i; i = ne[i]) { int j = e[i]; if (dmax[j] < max(dmax[i], w[j])) { dmax[j] = max(dmax[i], w[j]); if (!st[j]) q.push(j); } } }}int main() { scanf("%d%d", &n, &m); for (int i = 1; i <= n; i ++ ) scanf("%d", &w[i]); memset(h, -1, sizeof h); memset(rh, -1, sizeof rh); while (m -- ) { int u, v, t; scanf("%d%d%d", &u, &v, &t); add(h, u, v), add(rh, v, u); if (t == 2) add(h, v, u), add(rh, u, v); } spfa(), rspfa(); int res = 0; for (int i = 1; i <= n; i ++ ) res = max(res, dmax[i] - dmin[i]); printf("%d\n", res); return 0;}
观察到我们写的两个\(SPFA\)其实有很多相似点,所以可以合并成一个,加上一些参数就行(用来区分, 例如:遍历的邻接表不同,起点不同,要求的最短和最长性质不同)但是在合并的\(SPFA\)中要注意:\(memset\)的时候因为我们传进去的距离数组只是一个指针,所以与我们要的字节大小不符合,所以应该写成memset(d, 0x3f, sizeof dmin);当然这只是示例
\(合并的SPFA\)
#include #include #include using namespace std;const int N = 2e5 + 10, M = 1e6 + 10, INF = 0x3f3f3f3f;int dmax[N], dmin[N], st[N];int h[N], rh[N], e[M], ne[M], w[N], idx;int n, m;void add(int *h, int a, int b) { e[idx] = b, ne[idx] = h[a], h[a] = idx ++ ;}void spfa(int *h, int *d, int S, int type) { memset(st, 0, sizeof st); if (type) memset(d, 0xcf, sizeof dmax); else memset(d, 0x3f, sizeof dmin); queue q; d[S] = w[S], q.push(S), st[S] = true; while (q.size()) { auto t = q.front(); q.pop(); st[t] = false ; for (int i = h[t]; ~i; i = ne[i]) { int j = e[i]; if (type) { if (d[j] < max(d[t], w[j])) { d[j] = max(d[t], w[j]); if (!st[j]) q.push(j); } } else { if (d[j] > min(d[t], w[j])) { d[j] = min(d[t], w[j]); if (!st[j]) q.push(j); } } } }}int main() { scanf("%d%d", &n, &m); for (int i = 1; i <= n; i ++ ) scanf("%d", &w[i]); memset(h, -1, sizeof h); memset(rh, -1, sizeof rh); while (m -- ) { int u, v, t; scanf("%d%d%d", &u, &v, &t); add(h, u, v), add(rh, v, u); if (t == 2) add(h, v, u), add(rh, u, v); } spfa(h, dmin, 1, 0); // 正着跑最短路 spfa(rh, dmax, n, 1); // 反着跑最长路 int res = 0; for (int i = 1; i <= n; i ++ ) res = max(res, dmax[i] - dmin[i]); printf("%d\n", res); return 0;}
写法对比
两个\(SPFA\):时间\(250ms\),码量\(94\)行,容易\(Debug\)(原因:分开逻辑清晰一点)一个\(SPFA\):时间\(227ms\),码量\(80\)行,容易出\(Bug\),不好\(Debug\)(原因:我菜)
\(\color{Green}{Accepted!}\)
-
微头条丨AcWing341. 洛谷P1073, NOIP2009 最优贸易
AcWing题目传送门洛谷题目传送门题目大意$~~~~~~$一个投机倒把的奸商想要通过城市不太健全的贸易系统坑...
来源: 微头条丨AcWing341. 洛谷P1073, NOIP2009 最优贸易
百事通!面向对象与面向过程
全球速递!Flex布局总结
马斯克给全球车主发福利:每人可“白嫖”30天免费EAP试用服务
阵容十分豪华 2023最受期待的十大游戏来了:暗黑4位列第三
首发天玑8100:荣耀平板V8 Pro带来超级笔记 自动去广告
起点读书宣布百部经典作品限时免费:包括《诛仙》《红楼梦》等
世界热点!男子修车时发现4S店虚报维修定损金额 要求退一赔三胜诉
Codeforces 1630 E Expected Components 题解 (组合数学)
头条:Java基础项目:超市管理项目
每日动态!2023春运车票24日开售 除夕车票要等到1月7日
《妮姬》首月收入突破6.9亿!腾讯海外收入占比提升达12.5%
今日热门!超越电竞机!Redmi K60要榨干第二代骁龙8:画质、帧率、亮度三不降
每日精选:效果堪比镀铬 2.2万元的特斯拉Model Y新配色值不值?
环球观察:高可用 Canal集群 实操( 秒懂 + 史上最全)
微头条丨认证管理(锐捷业软篇)
Intel拆分GPU部门 一把手重回技术岗 累计亏损超20亿美金
天天通讯!iPhone 14 Pro爆出“闪线门” :屏幕出现诡异的绿色和黄色细横线
全球热点评!当ChatGPT遇上弱智吧:全程爆笑
夫妻的世界翻拍哪部电视剧?夫妻的世界最后结局是什么意思?
滕王阁为什么叫阁不叫楼?滕王阁为什么是三大名楼之首?
情非情砸车是第几集?情非情盖总和保姆的结局是什么?
小昭去波斯是哪一集?小昭去波斯后她母亲去哪儿了?
男人是大猪蹄子是什么意思?男人是大猪蹄子女人是什么?
排序算法模板(更新中)
当前速读:机器学习——果蔬分类
每日消息!性能超越电竞手机!Redmi K60 Pro综合跑分达135万
信息:千万别强忍 20岁小伙憋气压抑咳嗽导致昏厥
特斯拉今年股价累计暴跌超60%!马斯克透露大跌原因
收购动视暴雪遇阻 微软哭弱:根本打不过索尼、任天堂
到手9袋!良品铺子坚果礼盒1440 仅44元包邮
每日讯息!教你用JavaScript实现背景图像滑动
户外运动有哪些项目?户外运动品牌排行榜
什么鱼营养价值最高?什么鱼只会逆流而上?
金木水火土命怎么算出来的?金木水火土哪个腿长?
玉面小飞龙是什么意思?玉面小飞龙出自哪里?
Redmi K60系列上架:三颗口碑最好的芯片都拿到了 12月27日发
每日聚焦:最快闪充旗舰!真我GT Neo5充电头曝光:支持240W充电
环球热讯:紫米裁员80%并入小米?官方澄清:ZMI品牌将继续存在
全球新资讯:9.99万元遭疯抢 五菱宏光MINI EV敞篷版下线:能跑280km
苯胺皮是什么皮?苯胺皮和纳帕皮有什么区别?
世界新动态:CloudCanal实战-五分钟搞定Oracle到StarRocks数据迁移与同步
(一)elasticsearch 编译和启动
【速看料】马斯克辞任CEO,产品经理如何用项目协作软件武装自己?
焦点速讯:字节鏖战美团的关键一役
重点聚焦!糗事百科宣布将关闭服务 自侃“享年17岁”
全球观点:神似苹果AirPower!特斯拉推出无线充电板:最高功率15W
手慢无 民族品牌两面针牙膏大促:四支到手20元还送牙刷
又一新能源品牌官宣涨价:最少涨5千 今年买车还剩最后一周“窗口期”
全球速看:盘点适合《战神》奎爷的演员:道恩·强森、杰森·莫玛等
新型复兴号CR200J首次亮相:Wi-Fi全覆盖 充电插口增加
环球微动态丨比亚迪DM-i再外放 东风小康风光蓝电E5官图发布:综合续航1150km
霍乱疫情卷土重来:已致马拉维国410人死亡
环球今热点:随身咖啡馆 精神X小时:Nevercoffee咖啡1.99元(京东5元)
天天微头条丨什么是 HTML5?
每日消息!Ubuntu:Docker 容器操作
天天关注:苹果降低中国工厂依赖:真要搬走?iPhone 14制造难度降低
全球聚焦:不装了!日本万亿重新发展核能:新一代核反应堆准备中
【热闻】冬至湖南浏阳全城燃放烟花 满城烟花一河诗画:网友羡慕哭
焦点简讯:顺丰又上热搜!买Chanel耳钉顺丰运掉五颗珍珠
焦点热门:修复RX 7900显卡功耗异常 AMD新驱动实测:有用 但没什么大用
天天简讯:比iPhone 14 Pro Max更轻更便宜 OPPO Find N2首销:7999元
4插槽怪兽 华硕、猫头鹰合作打造最安静、最冷静的RTX 4090/4080显卡
动态:5.2万亿财富没了 特斯拉股东喊话马斯克:别只顾着推特了
世界微速讯:小岛秀夫:只有Xbox懂我
天天通讯!本田思域Type R各国/地区售价曝光 在日本才卖20多万?
每日短讯:负债585.68亿:国美获黄光裕公司三笔贷款累计5亿港元
全球快看点丨新能源车国补退场倒计时!车企打响价格战:现金立减、保险补贴
时隔半年 终于不寂寞!讯景发布全球第二款RX 6700
中国哪里的羊肉最好吃?这5个地方 你最爱谁?
后壳质感堪比玉石!vivo S16 Pro图赏
微软重构资源管理器进程:Windows 11运行速度大提升
支付宝接入技术
Python requests库指定IP请求,并使用HTTPS证书验证
世界今热点:MAUI新生4.5-字体图像集成Font&Image
精彩看点:Codeforces 1654 G Snowy Mountain 题解 (重心分治)
美国遭史上最严重禽流感疫情:鸡蛋价格创纪录 真吃不起节奏
环球速看:FreeSWITCH学习笔记:Lua脚本
每日短讯:剪映上线团队剪辑“神技”:异地多端一起剪视频成为可能
3299元起 vivo S16 Pro手机发布:首发双面柔光人像拍摄
环球信息:童年的味道 大白兔奶糖促销:1斤20元到手
环球聚焦:自拍绝了!vivo发布新机S16e:2099元起、行业首创“玉质玻璃”工艺
软链接和硬链接
世界热消息:渗透实录-02
雷军宣布小米人事调整:总裁王翔退休 卢伟冰晋升
环球热消息:特斯拉北美大降价5.2万 超高折扣只为保住销量?
vivo S16系列亮相:标准版搭载骁龙870 Pro版搭载天玑8200
vivo S16系列出厂预装OriginOS 3 虚拟内存提升8G
vivo S16系列7.36mm机身塞进4600mAh:苹果iPhone都没做到
快资讯:教你用JavaScript实现鼠标特效
【天天聚看点】男子开宝马专挑外地牌照车碰瓷 套路防不胜防:扔石头制造声响
迪士尼神话剧《美生中国人》新剧照:杨紫琼饰演观音 吴彦祖变身孙悟空
环球滚动:FIFA年终国家队排名:国足降至第80 美加墨世界杯出线希望增加
【报资讯】RTX 40系列移动显卡参数曝光:价格可不低
世界通讯!一加首款键盘曝光:全铝机身、自带USB-C/A接口
当前动态:基于Netty的IM聊天加密技术学习:一文理清常见的加密概念、术语等
JDK源码分析实战系列-PriorityBlockingQueue
资讯:Altium Designer v23.0.1.38图文详解
焦点热议:历史总是惊人地相似:复古主机Atari VCS宣告停产 一个时代终结
网友称考研民宿房费暴涨近20倍 店家:每年都一样