【例4-13】奖金(信息学奥赛一本通- P1352)

【题目描述】

由于无敌的凡凡在2005年世界英俊帅气男总决选中胜出,Yali Company总经理Mr.Z心情好,决定给每位员工发奖金。公司决定以每个人本年在公司的贡献为标准来计算他们得到奖金的多少。

于是Mr.Z下令召开m方会谈。每位参加会谈的代表提出了自己的意见:“我认为员工a的奖金应该比b高!”Mr.Z决定要找出一种奖金方案,满足各位代表的意见,且同时使得总奖金数最少。每位员工奖金最少为100元。

【输入】

第一行两个整数n,m,表示员工总数和代表数;

以下m行,每行2个整数a,b,表示某个代表认为第a号员工奖金应该比第b号员工高。

【输出】

若无法找到合理方案,则输出“Poor Xed”;否则输出一个数表示最少总奖金。

【输入样例】

2 1 1 2

【输出样例】

201

【提示】

【数据规模】

80%的数据满足:n≤1000,m≤2000;

100%的数据满足:n≤10000,m≤20000。

1. 题目背景与分析

核心问题:

公司给员工发奖金,存在M条建议,每条建议形式为:“员工A的奖金必须比B高”。要求满足所有建议,且总奖金数最少。基础奖金为 100 元。

模型转化:

这是一个典型的 “依赖关系” 问题。

如果“A的奖金 >B的奖金”,说明B是A的基础(或者说前驱)。只有确定了B的奖金,才能确定A的奖金。

  • 建图方向:建立一条从B指向A的有向边 (B->A)。

  • 图的性质:这是一个有向无环图。如果存在环(例如 A>B, B>A),则无法满足条件,输出 "Poor Xed"。

  • 目标:在满足拓扑序的前提下,求每个节点的最长路径长度(即层级)。


2. 算法选择:Kahn算法+动态规划

为了让总奖金最少,我们采取贪心策略:每个人只拿“刚好满足条件”的最低工资。

即:w[A]=max(所有前驱的工资) + 1。

为什么选择Kahn算法(入度表法)?

  1. 天然契合:Kahn 算法的核心是不断剥离“入度为0”的点。在本题中,入度为0 代表“没有比他工资更低的人了”,这些人直接拿基础工资 100 元。

  2. 层级递推:随着入度为0的点被移除,它们的后继节点的入度减少。当后继节点入度变为 0 时,说明它的所有下属工资都算好了,此时就可以结算它的工资。

  3. 判环简便:算法结束后,如果还有节点的入度不为0,说明存在环,直接判断无解。


3. 数据结构:邻接表(链式前向星)

由于题目数据范围是N<=10000, M<=20000,属于稀疏图。为了时间和空间效率,本题代码使用了邻接表(链式前向星)来存储图。

相比vector,链式前向星在空间上更紧凑,常数更小。

  • h[u]:存储节点u的第一条边的索引。

  • vtex[i]:第i条边指向的节点。

  • nxt[i]:第i条边的下一条同起点边的索引。


4. 完整代码

//Kahn 时间复杂度:O(N+M) 空间复杂度:O(N+M) #include <iostream> #include <queue> using namespace std; int n,m; int h[10010];//邻接表头指针数组 int vtex[20010];//邻接表第i条边终点的下标 int nxt[20010];//与邻接表第i条边同起点的下一条边的索引 int idx; int din[10010];//记录每个点的入度 int w[10010];//记录第i个员工的奖金 long long sum;//记录总奖金 queue<int> q; void addedge(int a,int b){ vtex[idx]=b; nxt[idx]=h[a]; h[a]=idx++; } int main(){ cin>>n>>m; //初始化邻接表头指针数组为-1 for(int i=1;i<=n;i++) h[i]=-1; //邻接表存边 因为本题点数过多,且为稀疏图 不选邻接矩阵 for(int i=1;i<=m;i++){ int a,b; cin>>a>>b; //第a号员工奖金应该比第b号员工高,就建立一条b->a的边 addedge(b,a); din[a]++;//a入度加一 } for(int i=1;i<=n;i++){//遍历所有员工 if(din[i]==0){//如果入度为0 q.push(i);//就入队 //初始化入度为0的员工,奖金100,因为他们不比任何员工奖金高 w[i]=100; } } while(!q.empty()){ int tmp=q.front();//访问队首元素 q.pop();//队首出队 //接下来访问邻接表找到所有与tmp有边相连的员工 int p=h[tmp]; while(p!=-1){ //a为应比tmp奖金高的员工编号 int a=vtex[p]; //更新a员工的奖金 w[a]=max(w[a],w[tmp]+1); //a员工入度-1 din[a]--; //如果a员工入度为0 就入队 if(din[a]==0) q.push(a); //更新指针 p=nxt[p]; } } //结束后,遍历所有员工,如果存在入度不为0的员工 //代表无法找到合理方案 for(int i=1;i<=n;i++){ if(din[i]!=0){ cout<<"Poor Xed"; return 0; } sum+=w[i];//总奖金 } //否则就输出总奖金 cout<<sum; return 0; }

5. 解题总结

  1. 建图方向

    • 一定要理清谁依赖谁。本题中“A比B高”意味着 A 依赖 B,所以边是B->A。如果建反了,求出来的就是最小值而不是最大值,逻辑会崩盘。

  2. 判环

    • 题目中可能存在矛盾的建议(如 A>B 且 B>A)。Kahn 算法天然支持判环:只要算法结束后还有点没进过队列(即din[i]!=0),就是有环。

  3. 数据类型

    • 虽然每个人奖金可能不多,但总奖金sum可能会超过int范围,使用long long是良好的编程习惯。

  4. 初始化

    • 链式前向星的h数组记得初始化为-1

    • 入度为0的点,初始奖金设为100。

这道题是拓扑排序的经典入门题,理解了它,就理解了“依赖关系解析”的核心逻辑。

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

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

相关文章

python基于人工智能的智能客服系统设计与实现

目录 基于人工智能的智能客服系统设计与实现摘要 开发技术路线相关技术介绍核心代码参考示例结论源码lw获取/同行可拿货,招校园代理 &#xff1a;文章底部获取博主联系方式&#xff01; 基于人工智能的智能客服系统设计与实现摘要 随着人工智能技术的快速发展&#xff0c;智能…

芯片制造企业网页如何集成百度开源上传组件实现分片上传源码?

大文件传输系统设计方案&#xff08;基于SM4国密算法&#xff09; 需求分析 作为四川某软件公司的开发人员&#xff0c;我面临以下核心需求&#xff1a; 实现10GB级别大文件的分片上传/下载采用国密SM4算法进行端到端加密服务端需支持SM4加密存储兼容主流浏览器及信创国产化…

基于Django的智慧农业农产品销售及农机设备管理系统设计与实现

目录摘要开发技术路线相关技术介绍核心代码参考示例结论源码lw获取/同行可拿货,招校园代理 &#xff1a;文章底部获取博主联系方式&#xff01;摘要 随着现代农业信息化和智能化的发展&#xff0c;智慧农业成为提升农业生产效率和农产品销售水平的重要方向。本系统基于Django框…

航空航天网页项目怎么用vue3实现大文件分片上传源码?

前端老哥的“懒人”大文件上传方案&#xff08;Vue3原生JS&#xff09; 兄弟们&#xff01;我是辽宁一名“头发没秃但代码量秃”的前端程序员&#xff0c;最近接了个外包活——给客户做文件管理系统&#xff0c;核心需求就仨字儿&#xff1a;“稳、省、兼容”&#xff01;客户…

基于python框架的房产交易服务平台的设计与实现

目录房产交易服务平台的设计与实现摘要开发技术路线相关技术介绍核心代码参考示例结论源码lw获取/同行可拿货,招校园代理 &#xff1a;文章底部获取博主联系方式&#xff01;房产交易服务平台的设计与实现摘要 该平台基于Python框架开发&#xff0c;旨在为用户提供高效、安全的…

互联网教育平台如何优化百度编辑器的Word公式渲染速度?

【国企项目手记&#xff1a;企业网站后台管理系统富文本编辑器功能扩展开发全记录】 项目负责人&#xff1a;XXX&#xff08;北京某国企&#xff09; 日期&#xff1a;2023年X月X日 一、需求分析与技术选型 1. 核心需求梳理 客户要求在企业网站后台管理系统的文章发布模块中扩…

基于python的婚庆公司服务平台的设计与实现

目录摘要开发技术路线相关技术介绍核心代码参考示例结论源码lw获取/同行可拿货,招校园代理 &#xff1a;文章底部获取博主联系方式&#xff01;摘要 婚庆行业随着社会经济发展和消费升级呈现快速增长趋势&#xff0c;传统婚庆服务模式存在信息不透明、流程繁琐、资源整合不足等…

Edge TTS深度解析:跨平台文本转语音技术实践与性能优化

Edge TTS深度解析&#xff1a;跨平台文本转语音技术实践与性能优化 【免费下载链接】edge-tts Use Microsoft Edges online text-to-speech service from Python WITHOUT needing Microsoft Edge or Windows or an API key 项目地址: https://gitcode.com/GitHub_Trending/ed…

融合无人机与轨道交通的智能系统:面向巡检、客流、应急与物流的场景实现研究

目录 摘要 第一章 引言 1.1 研究背景与意义 1.2 国内外研究现状 1.3 研究内容与方法 第二章 系统总体架构设计 2.1 设计原则 2.2 四层融合架构 第三章 核心应用场景实现路径 3.1 场景一&#xff1a;基础设施智能巡检 3.2 场景二&#xff1a;大客流智能预警与疏导 3.…

汽车电子研发如何通过百度富文本编辑器处理CAD图纸注释?

老张的CMS企业官网外包项目日记&#xff1a;给UEditor加上Word粘贴神功 Day 1&#xff1a;接到需求时的懵逼时刻 "什么&#xff1f;要在UEditor里实现Word一键粘贴&#xff1f;还要支持Latex公式转MathML&#xff1f;"我看着需求文档&#xff0c;感觉头发又少了几根。…

汽车制造企业网页如何实现大附件分片上传的源码?

【一个.NET程序员的悲喜交加&#xff1a;前端搞定了&#xff0c;后端求包养&#xff01;】 各位道友好&#xff01;俺是山西某个人.NET程序员&#xff0c;刚啃完《C#从入门到住院》&#xff0c;就被客户按头要求搞个20G大文件上传下载系统。现在前端用Vue3原生JS硬怼出了半成品…

5分钟搞定DOL汉化美化:新手零基础配置指南

5分钟搞定DOL汉化美化&#xff1a;新手零基础配置指南 【免费下载链接】DOL-CHS-MODS Degrees of Lewdity 整合 项目地址: https://gitcode.com/gh_mirrors/do/DOL-CHS-MODS 想要在Degrees of Lewdity中获得完美中文游戏体验&#xff1f;DOL-CHS-MODS整合包为你提供了完…

RedisInsight完整安装教程:在Windows上一键部署可视化Redis管理平台

RedisInsight完整安装教程&#xff1a;在Windows上一键部署可视化Redis管理平台 【免费下载链接】RedisInsight Redis GUI by Redis 项目地址: https://gitcode.com/GitHub_Trending/re/RedisInsight 还在为复杂的Redis命令行操作而烦恼吗&#xff1f;RedisInsight作为R…

如何让 AI 跨行业接项目,全自动化帮你干活

最近一段时间,AI 辅助开发领域出现了一个明显趋势: “一个人 + AI,可以完成过去一个小团队才能完成的项目。” 通过多阶段流程拆分、角色化 AI(分析、设计、开发、测试), 确实可以在短时间内完成结构完整、文档齐…

LLM提示工程让遗传咨询更精准

&#x1f4dd; 博客主页&#xff1a;Jax的CSDN主页 LLM提示工程&#xff1a;精准遗传咨询的革命性突破 目录 LLM提示工程&#xff1a;精准遗传咨询的革命性突破 引言&#xff1a;遗传咨询的精准化困局 一、提示工程如何重塑遗传咨询全流程 1. 从痛点到价值&#xff1a;维度一的…

2026 年 1 月油桶烘箱厂家推荐排行榜,高温油桶烘箱,工业油桶烘箱,油桶烘箱加热原理,高效节能烘烤设备公司推荐! - 企业推荐官【官方】

2026年1月油桶烘箱厂家推荐排行榜:聚焦高温与工业应用,解析加热原理与高效节能趋势 在化工、新能源、复合材料及机械制造等众多工业领域,油桶烘箱作为一种关键的热处理设备,承担着对油料、涂料、化工原料桶进行高效…

OBS Spout2插件终极指南:实现跨应用4K视频无缝传输

OBS Spout2插件终极指南&#xff1a;实现跨应用4K视频无缝传输 【免费下载链接】obs-spout2-plugin A Plugin for OBS Studio to enable Spout2 (https://github.com/leadedge/Spout2) input / output 项目地址: https://gitcode.com/gh_mirrors/ob/obs-spout2-plugin O…

STM32单片机智能储物柜快递柜无线APP快递员169(设计源文件+万字报告+讲解)(支持资料、图片参考_相关定制)_文章底部可以扫码

STM32单片机智能储物柜快递柜无线APP快递员169产品功能描述&#xff1a; 本系统由STM32F103C8T6单片机核心板、无线蓝牙/WIFI模块-可选、TFT1.44寸彩屏液晶显示电路、智能语音电路、四路舵机驱动电路、矩阵按键电路及电源电路。注意视频监控及WIFI套餐才拥有视频监控(含WIFI功能…

机械制造行业网页如何用html5实现大文件分片上传源码?

前端老哥的奇幻漂流&#xff1a;20G文件上传历险记 大家好&#xff0c;我是那个"预算100元想造航天飞机"的陕西前端老哥。最近接了个外包&#xff0c;客户要求用原生JS实现20G文件上传&#xff0c;还要兼容IE9…我差点没把手中的肉夹馍吓掉&#xff01; 需求分析&a…

STM32单片机智能喂食器164

STM32单片机智能喂食器164 51-C16时钟校时喂食水位加水喂水三餐3定时声光提醒OLED屏手动自动(无线方式选择) 51-C16N无无线-无APP板: 51-C16B蓝牙无线-APP版: 51-C16W-WIFI无线-APP版: 51-C16CAN-视频监控WIFI无线-APP版: 产品功能描述&#xff1a; 本系统由STC89C52单片机最小…