分糖果(candy)(信息学奥赛一本通- P1380)

【题目描述】

童年的我们,将和朋友分享美好的事物作为自己的快乐。这天,C小朋友得到了Plenty of candies,将要把这些糖果分给要好的朋友们。已知糖果从一个人传给另一个人需要1 秒的时间,同一个小朋友不会重复接受糖果。由于糖果足够多,如果某时刻某小朋友接受了糖果,他会将糖果分成若干份,分给那些在他身旁且还没有得到糖果的小朋友们,而且自己会吃一些糖果。由于嘴馋,小朋友们等不及将糖果发完,会在得到糖果后边吃边发。每个小朋友从接受糖果到吃完糖果需要m秒的时间。那么,如果第一秒C小朋友开始发糖,第多少秒所有小朋友都吃完了糖呢?

【输入】

第一行为三个数n、p、c,为小朋友数、关系数和C小朋友的编号。

第二行为一个数m,表示小朋友吃糖的时间。

下面p行每行两个整数,表示某两个小朋友在彼此身旁。

【输出】

一个数,为所有小朋友都吃完了糖的时间。

【输入样例】

4 3 1 2 1 2 2 3 1 4

【输出样例】

5

【提示】

【样例解释】

第一秒,糖在1手上。第二秒,糖传到了2、3的手中。第三秒,糖传到了4的手中,此时1吃完了。第四秒,2、3吃完了。第五秒,4吃完了。所以答案是5。

【限制】

40%的数据满足:1≤n≤100;

60%的数据满足:1≤n≤1000;

100%的数据满足:1≤n≤100000;

m≤n×(n−1)2,不会有同一个关系被描述多次的情况。

0. 题目概要

有N个小朋友(N<=100,000)和P条好友关系。糖果从起点C开始传递,每一秒传给相邻的朋友。每个人吃糖需要m秒。

求:所有人都吃完糖果的时刻。

核心转化

  1. 所有人吃完的时刻 = max(每个人拿到糖的时刻+m)。

  2. 问题转化为:求起点C到其他所有点的最短路径(距离即为时间)。

1. 算法选型

题目中传递时间固定为 1 秒,即所有边权均为 1。

  • BFS:无权图最优解,复杂度O(N+P)。

  • Dijkstra (邻接表+堆优化):通用性强,复杂度O(P log N),本题解采用此方法作为模板练习。

2. 深度解析:为什么不能开 100 亿数组?

这是本题最大的思维陷阱。有同学看到N=10^5,第一反应是:“边数上限M最多可能是完全图 N^2 = 10^10 吗?”

于是反手开了一个 long long vtex[10000000000] —— 虽然这道题没问题,但别的编译器可能将直接导致 MLE或者 CE。

这里要讲一个信奥赛场上的“数据规模跷跷板定律”:

2.1 内存与时间的物理极限

如果真的有10^10条边:

  • 内存:10^10*4B *3(数组)约等于120GB。普通比赛限制仅 256MB,根本存不下。

  • 时间:光是cin读取100亿个数,就需要好几个小时,而比赛时限通常只有1秒。

2.2 出题人的平衡

在算法题中,N(点)和 M(边)永远是动态平衡的:

  • 情形 A:稠密图 (M约等于N^2)

    • 出题人为了不超时,一定会把N限制得很小(通常N<=2000)。

    • 此时才需要考虑邻接矩阵。

  • 情形 B:稀疏图 (M与N同量级)

    • 当N达到10^5级别时,出题人必须限制M的大小,通常M只会是N的几倍或几十倍(如2*10^5或 50 *10^5)。

2.3 为什么开100*maxn

  • 常规开2*maxn导致tle,说明测试数据中边数不少(半稠密图)。

  • 为了防止数组越界,我们直接开到100*maxn(约 1000 万容量)。

2.4 为什么没炸内存?

  • 理论计算:1000 万的int数组*3约等于114MB>64MB。

  • 实际情况:利用操作系统的按需分配机制。只要idx指针没有真正推到 1000 万,未使用的数组空间就不会占用物理内存。

  • 结果:既防住了边数过多的RE(本题还会造成TLE),又利用系统特性躲过了 MLE。

结论:

看到N=10^5,不要害怕N^2的边数。边数组 (vtex, nxt, wt) 开到 5000000 到 10000000 基本上足够且安全。

3. 完整代码

//点数10^5量级 用Dijkstra #include <iostream> #include <cstring> #include <queue> using namespace std; int n,p,c,m; const int maxn=100010; int h[maxn]; int vtex[100*maxn]; int nxt[100*maxn]; int wt[100*maxn]; int vis[maxn]; int dis[maxn]; int idx; struct node{ int id;//小朋友编号 int w;//到c小朋友的距离 //优先队列默认大根堆,重载运算符修改为小根堆 friend bool operator <(node a,node b){ return a.w>b.w; } }; priority_queue<node> q; void dijkstra(int s){ dis[s]=1;//这个不能丢 node tmp; tmp.id=s; tmp.w=1;//第一秒,糖在1手上,起始就是1秒 q.push(tmp);//起点入队 while(!q.empty()){ tmp=q.top(); q.pop(); int nid=tmp.id; if(vis[nid]==1) continue;//如果tmp已经出队过,就跳过 vis[nid]=1;//如果没有出队过,就打上标记 int p=h[nid]; while(p!=-1){ if(vis[vtex[p]]==0){ if(dis[vtex[p]]>dis[nid]+wt[p]){ dis[vtex[p]]=dis[nid]+wt[p]; q.push({vtex[p],dis[vtex[p]]}); } } p=nxt[p]; } } } void addedge(int u,int v,int w){ vtex[idx]=v; nxt[idx]=h[u]; wt[idx]=w; h[u]=idx++; } int main(){ ios::sync_with_stdio(false); cin.tie(0); cin>>n>>p>>c;//小朋友数 关系数(边数) 起点 cin>>m;//吃糖时间 memset(h,-1,sizeof(h));//初始化头指针数组 //邻接表存图 for(int i=1;i<=p;i++){ int u,v,w; cin>>u>>v; w=1;//小朋友传给小朋友需要1s addedge(u,v,w);//双向的 addedge(v,u,w); } for(int i=1;i<=n;i++) dis[i]=0x3f3f3f3f;//初始化每个小朋友到c小朋友距离为无穷 dijkstra(c); int ma=0; for(int i=1;i<=n;i++){//遍历所有朋友,找最长时间 if(dis[i]!=0x3f3f3f3f) ma=max(ma,dis[i]); } cout<<ma+m;//输出最长传递时间+那个人吃糖果时间 return 0; }

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/1131366.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

轻便型国产DVL推荐,怎么选购是关键,偶信科技教你怎么选?

在水下探测、海洋科考、水下装备导航等场景中&#xff0c;DVL&#xff08;多普勒计程仪&#xff09;早已成为不可或缺的核心设备。随着国产技术的崛起&#xff0c;轻便型DVL凭借灵活适配、易于集成的优势&#xff0c;逐渐取代传统笨重设备成为市场主流。但面对五花八门的产品&a…

当 AAAI 遇见Voice Agent——MagicHub Meetup 2026首站·新加坡AAAI同期交流会丨活动推荐

2026年将迎来智能体的原生语音交互爆发&#xff01; 想打造更智能、更人性化的Voice Agent&#xff1f; 高质量数据&#xff0c;仍是破局的核心。 我们诚邀所有 AI开发者、数据科学家、产品经理和行业专家 共同探讨Data for Voice Agent数据 最新趋势、挑战与最佳实践 本…

WinCC报表功能大揭秘,轻松上手无门槛

wincc报表 功能如下&#xff1a; 日报表&#xff1a;每日24点数据&#xff0c;如果设置的是累计值&#xff0c;计算每小时的差值&#xff0c;和最终汇总一日总累计 月报表&#xff1a;每日0点数据显示&#xff0c;如果设置的是累计值&#xff0c;计算每日的差值&#xff0c;和最…

Razer 发布 Project AVA:全息数字人+游戏屏幕实时分析;Liquid AI 发布端侧端到端音频模型丨日报

开发者朋友们大家好&#xff1a; 这里是 「RTE 开发者日报」 &#xff0c;每天和大家一起看新闻、聊八卦。我们的社区编辑团队会整理分享 RTE&#xff08;Real-Time Engagement&#xff09; 领域内「有话题的技术」、「有亮点的产品」、「有思考的文章」、「有态度的观点」、「…

虚拟团队跨时区协作难?AI应用架构师设计:智能时间协调与异步协作系统

虚拟团队跨时区协作难?AI应用架构师设计:智能时间协调与异步协作系统 关键词:虚拟团队、跨时区协作、智能时间协调、异步协作、AI应用、系统设计 摘要:本文聚焦于虚拟团队跨时区协作难题,详细阐述AI应用架构师所设计的智能时间协调与异步协作系统。通过剖析系统核心概念、…

碳交易机制下考虑需求响应的综合能源系统优化运行Matlab代码

✅作者简介&#xff1a;热爱科研的Matlab仿真开发者&#xff0c;擅长数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。 &#x1f34e; 往期回顾关注个人主页&#xff1a;Matlab科研工作室 &#x1f447; 关注我领取海量matlab电子书和数学建模资料 &#x1…

自由职业者重返职场求职创意服务岗?无就业优势别慌,自我提升帮你逆袭

在创意服务行业&#xff0c;自由职业者凭借灵活的工作模式和多元的项目经验&#xff0c;成为市场上的重要参与者。但随着行业竞争加剧、项目稳定性需求提升&#xff0c;不少自由职业者开始将目光投向全职职场。然而&#xff0c;重返职场的道路并不平坦——长期单打独斗形成的工…

【Simulink复现】基于行波理论的输电线路故障诊断方法研究

✅作者简介&#xff1a;热爱科研的Matlab仿真开发者&#xff0c;擅长数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。 &#x1f34e; 往期回顾关注个人主页&#xff1a;Matlab科研工作室 &#x1f447; 关注我领取海量matlab电子书和数学建模资料 &#x1…

基于遗传粒子群算法的无人机路径规划【遗传算法|基本粒子群|遗传粒子群三种方法对比】Matlab代码

✅作者简介&#xff1a;热爱科研的Matlab仿真开发者&#xff0c;擅长数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。 &#x1f34e; 往期回顾关注个人主页&#xff1a;Matlab科研工作室 &#x1f447; 关注我领取海量matlab电子书和数学建模资料 &#x1…

Alpha Wire 工业线缆材料与温度等级深度解读

在工业自动化、设备控制、机械制造等系统设计中&#xff0c;线缆的材料、温度等级与结构直接关系到系统稳定性与长期可靠性。Alpha Wire 作为全球领先的线缆和电线制造商&#xff0c;其工业线缆产品涵盖多种绝缘材料、护套工艺和温度等级&#xff0c;为工程师提供了灵活的设计选…

​​​​​​​中小企业数据防丢实战——一台旧电脑=你的私有云?松鼠如何用闲置设备搭建高效协同网络

“家里那台吃灰的旧笔记本&#xff0c;现在成了我们公司的‘数据保险箱’。”——深圳某设计工作室主理人 陈工三年前换下的联想ThinkPad&#xff0c;屏幕碎了、电池鼓包&#xff0c;一直塞在柜子里。直到上周&#xff0c;我把它接上电源、连上网线&#xff0c;装上一款叫松鼠备…

Kubernetes(三)——组网概念和基础操作指令

文章目录前言一、客户端访问k8s集群架构图二、k8s组网方案1、为什么要部署CNI网络组件2、flannel概述2.1、flannel是什么2.2、flannel适用场景2.3、flannel网段分配规则2.4、Veth cni0 网桥的作用2.5、K8S 中 Pod 网络通信2.6、flannel的跨主机Pod通信3、flannel的三种转发数据…

2026年云原生数据库架构评测:领先产品与海外业务选型指南

核心观点摘要云原生数据库正成为企业数字化转型的核心基础设施&#xff0c;特别是在高并发、分布式和全球化业务场景中表现突出。当前主流云原生数据库在架构设计上呈现存算分离、多模融合和AI原生三大技术趋势&#xff0c;显著提升了性能、弹性和智能化水平。海外业务选型需重…

深度学习毕设选题推荐:python基于深度学习算法训练数字识别

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

Kubernetes(四)——项目生命周期管理和yml文件编写

文章目录前言一、项目生命周期管理1、项目生命周期阶段2、创建阶段&#xff08;kubectl create&#xff09;3、发布阶段&#xff08;kubectl expose&#xff09;4、更新阶段&#xff08;kubectl set&#xff09;5、回滚阶段&#xff08;kubectl rollout&#xff09;6、删除阶段…

新兴市场股市估值与智能物流无人机配送的互动

新兴市场股市估值与智能物流无人机配送的互动 关键词:新兴市场、股市估值、智能物流、无人机配送、机器学习、供应链优化、投资决策 摘要:本文探讨了新兴市场股市估值与智能物流无人机配送技术之间的互动关系。我们将分析无人机配送技术如何影响新兴市场的供应链效率,进而改…

大数据领域数据压缩的常见误区与纠正

大数据领域数据压缩的常见误区与纠正&#xff1a;拨开迷雾&#xff0c;探寻真相 关键词&#xff1a;大数据、数据压缩、误区、无损压缩、有损压缩、压缩算法、存储效率、传输速度 摘要&#xff1a;在大数据时代&#xff0c;数据量呈爆发式增长&#xff0c;数据压缩成为应对数据…

【开题答辩全过程】以 农村留守儿童健康医疗服务系统为例,包含答辩的问题和答案

个人简介一名14年经验的资深毕设内行人&#xff0c;语言擅长Java、php、微信小程序、Python、Golang、安卓Android等开发项目包括大数据、深度学习、网站、小程序、安卓、算法。平常会做一些项目定制化开发、代码讲解、答辩教学、文档编写、也懂一些降重方面的技巧。感谢大家的…

(新卷,100分)- 滑动窗口最大和(Java JS Python C)

(新卷,100分)- 滑动窗口最大和&#xff08;Java & JS & Python & C&#xff09;题目描述有一个N个整数的数组&#xff0c;和一个长度为M的窗口&#xff0c;窗口从数组内的第一个数开始滑动直到窗口不能滑动为止&#xff0c;每次窗口滑动产生一个窗口和&#xff08;…

计算机深度学习毕设实战-基于机器学习深度学习算法训练数字识别

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…