news 2026/7/7 17:41:02

算法竞赛备考冲刺必刷题(C++) | AcWing 1170 排队布局

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
算法竞赛备考冲刺必刷题(C++) | AcWing 1170 排队布局

本文分享的必刷题目是从蓝桥云课洛谷AcWing等知名刷题平台精心挑选而来,并结合各平台提供的算法标签和难度等级进行了系统分类。题目涵盖了从基础到进阶的多种算法和数据结构,旨在为不同阶段的编程学习者提供一条清晰、平稳的学习提升路径。

欢迎大家订阅我的专栏:算法题解:C++与Python实现!

附上汇总贴:算法竞赛备考冲刺必刷题(C++) | 汇总


【题目来源】

AcWing:1170. 排队布局 - AcWing题库

【题目描述】

当排队等候喂食时,奶牛喜欢和它们的朋友站得靠近些。

农夫约翰有N NN头奶牛,编号从1 11N NN,沿一条直线站着等候喂食。

奶牛排在队伍中的顺序和它们的编号是相同的。

因为奶牛相当苗条,所以可能有两头或者更多奶牛站在同一位置上。

如果我们想象奶牛是站在一条数轴上的话,允许有两头或更多奶牛拥有相同的横坐标。

一些奶牛相互间存有好感,它们希望两者之间的距离不超过一个给定的数L LL

另一方面,一些奶牛相互间非常反感,它们希望两者间的距离不小于一个给定的数D DD

给出M L M_LML条关于两头奶牛间有好感的描述,再给出M D M_DMD条关于两头奶牛间存有反感的描述。

你的工作是:如果不存在满足要求的方案,输出-1;如果1 11号奶牛和N NN号奶牛间的距离可以任意大,输出-2;否则,计算出在满足所有要求的情况下,1 11号奶牛和N NN号奶牛间可能的最大距离。

【输入】

第一行包含三个整数N , M L , M D N,M_L,M_DN,ML,MD

接下来M L M_LML行,每行包含三个正整数A , B , L A,B,LA,B,L,表示奶牛A AA和奶牛B BB至多相隔L LL的距离。

再接下来M D M_DMD行,每行包含三个正整数A , B , D A,B,DA,B,D,表示奶牛A AA和奶牛B BB至少相隔D DD的距离。

【输出】

输出一个整数,如果不存在满足要求的方案,输出-1;如果1 11号奶牛和N NN号奶牛间的距离可以任意大,输出-2;否则,输出在满足所有要求的情况下,1 11号奶牛和N NN号奶牛间可能的最大距离。

【输入样例】

4 2 1 1 3 10 2 4 20 2 3 3

【输出样例】

27

【算法标签】

《AcWing 1170 排队布局》 #SPFA# #差分约束#

【代码详解】

#include<bits/stdc++.h>usingnamespacestd;constintN=1005,M=21005,INF=0x3f3f3f3f;// 最大顶点数、边数、无穷大intn,m1,m2;// n: 顶点数, m1: 第一类边数, m2: 第二类边数inth[N],e[M],w[M],ne[M],idx;// 链式前向星存储图intdist[N];// 最短距离数组intcnt[N];// 松弛计数数组,用于检测负环boolst[N];// 标记顶点是否在队列中/** * 添加有向边 * @param a 起点 * @param b 终点 * @param c 权重 */voidadd(inta,intb,intc){e[idx]=b;// 边指向的顶点w[idx]=c;// 边的权重ne[idx]=h[a];// 指向原链表头h[a]=idx++;// 更新头指针}/** * SPFA算法检测负环,并计算最短路径 * 从size个顶点开始,检测图中是否存在负环 * @param size 入队的顶点数量 * @return 存在负环返回false,否则返回true */boolspfa(intsize){// 初始化memset(dist,0x3f,sizeof(dist));// 距离初始化为无穷大memset(st,0,sizeof(st));// 标记数组清零memset(cnt,0,sizeof(cnt));// 松弛计数清零queue<int>q;// SPFA队列// 将前size个顶点入队for(inti=1;i<=size;i++){dist[i]=0;// 距离设为0,相当于超级源点q.push(i);// 顶点入队st[i]=true;// 标记在队列中}// SPFA主循环while(!q.empty()){intt=q.front();// 取出队首顶点q.pop();st[t]=false;// 标记不在队列中// 遍历t的所有邻接边for(inti=h[t];i!=-1;i=ne[i]){intj=e[i];// 邻接顶点// 松弛操作if(dist[j]>dist[t]+w[i]){dist[j]=dist[t]+w[i];// 更新最短距离cnt[j]=cnt[t]+1;// 松弛次数+1// 如果顶点j被松弛了n次,说明存在负环if(cnt[j]>=n){returnfalse;// 存在负环}// 如果j不在队列中,入队if(!st[j]){q.push(j);st[j]=true;}}}}returntrue;// 不存在负环}intmain(){// 输入顶点数、第一类边数、第二类边数cin>>n>>m1>>m2;// 初始化邻接表memset(h,-1,sizeof(h));// 添加基础约束边:x_{i+1} ≥ x_i// 即:x_i - x_{i+1} ≤ 0// 建边:i+1 → i,权重0for(inti=1;i<n;i++){add(i+1,i,0);}// 处理第一类边:x_b - x_a ≤ cwhile(m1--){inta,b,c;cin>>a>>b>>c;// 确保a ≤ bif(b<a){swap(a,b);}// 约束:x_b - x_a ≤ c// 建边:a → b,权重cadd(a,b,c);}// 处理第二类边:x_b - x_a ≥ cwhile(m2--){inta,b,c;cin>>a>>b>>c;// 确保a ≤ bif(b<a){swap(a,b);}// 约束:x_b - x_a ≥ c// 等价于:x_a - x_b ≤ -c// 建边:b → a,权重-cadd(b,a,-c);}// 检测是否存在负环if(!spfa(n))// 从所有顶点开始检测{puts("-1");// 存在负环,无解}else{// 计算从顶点1到顶点n的最短路径spfa(1);// 从顶点1开始// 如果dist[n]为无穷大,说明不可达if(dist[n]==INF){puts("-2");}else{cout<<dist[n]<<endl;// 输出最短距离}}return0;}

【运行结果】

4 2 1 1 3 10 2 4 20 2 3 3 27
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/7 5:39:52

Higress v2:重新定义云原生网关的智能流量管理新时代

Higress v2&#xff1a;重新定义云原生网关的智能流量管理新时代 【免费下载链接】higress Next-generation Cloud Native Gateway | 下一代云原生网关 项目地址: https://gitcode.com/GitHub_Trending/hi/higress 还在为网关配置更新导致的业务中断而苦恼吗&#xff1f…

作者头像 李华
网站建设 2026/7/7 14:03:01

Windows效率革命:Flow Launcher完全使用手册

Windows效率革命&#xff1a;Flow Launcher完全使用手册 【免费下载链接】Flow.Launcher :mag: Quick file search & app launcher for Windows with community-made plugins 项目地址: https://gitcode.com/GitHub_Trending/fl/Flow.Launcher 你是否曾经计算过每天…

作者头像 李华
网站建设 2026/7/7 13:08:45

如何快速使用ms.js:毫秒转换的终极指南

如何快速使用ms.js&#xff1a;毫秒转换的终极指南 【免费下载链接】ms 项目地址: https://gitcode.com/gh_mirrors/msj/ms.js ms.js是一个轻量级的JavaScript时间转换工具库&#xff0c;专门用于在时间格式与毫秒之间进行快速转换。无论你是前端开发者还是Node.js工程…

作者头像 李华
网站建设 2026/7/6 23:44:53

如何快速搭建多平台音乐聚合器:一站式音乐搜索解决方案指南

如何快速搭建多平台音乐聚合器&#xff1a;一站式音乐搜索解决方案指南 【免费下载链接】music 音乐搜索器 - 多站合一音乐搜索解决方案 项目地址: https://gitcode.com/gh_mirrors/mus/music 在当今数字音乐时代&#xff0c;用户往往需要在不同音乐平台间来回切换才能找…

作者头像 李华
网站建设 2026/7/7 17:02:10

掌握SymPy特殊函数库:从数学理论到工程实践的全方位指南

掌握SymPy特殊函数库&#xff1a;从数学理论到工程实践的全方位指南 【免费下载链接】sympy 一个用纯Python语言编写的计算机代数系统。 项目地址: https://gitcode.com/GitHub_Trending/sy/sympy SymPy特殊函数库作为Python符号计算的核心组件&#xff0c;为科学研究、…

作者头像 李华
网站建设 2026/7/7 8:52:01

数字阅读的困境与突破:Readest如何用技术重新定义阅读体验?

你是否曾在不同设备间频繁切换阅读进度&#xff1f;是否因为格式兼容性问题而无法打开心仪的电子书&#xff1f;或者因为单调的阅读界面而失去阅读乐趣&#xff1f;这些数字阅读的痛点&#xff0c;正是Readest致力于解决的核心问题。 【免费下载链接】readest Readest is a mod…

作者头像 李华