news 2026/4/6 23:49:54

打卡信奥刷题(2714)用C++实现信奥题 P3243 [HNOI2015] 菜肴制作

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
打卡信奥刷题(2714)用C++实现信奥题 P3243 [HNOI2015] 菜肴制作

P3243 [HNOI2015] 菜肴制作

题目描述

知名美食家小 A 被邀请至 ATM 大酒店,为其品评菜肴。ATM 酒店为小 A 准备了nnn道菜肴,酒店按照为菜肴预估的质量从高到低给予111nnn的顺序编号,预估质量最高的菜肴编号为111

由于菜肴之间口味搭配的问题,某些菜肴必须在另一些菜肴之前制作,具体的,一共有mmm条形如iii号菜肴必须先于jjj号菜肴制作的限制,我们将这样的限制简写为(i,j)(i,j)(i,j)

现在,酒店希望能求出一个最优的菜肴的制作顺序,使得小 A 能尽量先吃到质量高的菜肴:

也就是说,

  1. 在满足所有限制的前提下,111号菜肴尽量优先制作。

  2. 在满足所有限制,111号菜肴尽量优先制作的前提下,222号菜肴尽量优先制作。

  3. 在满足所有限制,111号和222号菜肴尽量优先的前提下,333号菜肴尽量优先制作。

  4. 在满足所有限制,111号和222号和333号菜肴尽量优先的前提下,444号菜肴尽量优先制作。

  5. 以此类推。

例 1:共444道菜肴,两条限制(3,1)(3,1)(3,1)(4,1)(4,1)(4,1),那么制作顺序是3,4,1,23,4,1,23,4,1,2

例 2:共555道菜肴,两条限制(5,2)(5,2)(5,2)(4,3)(4,3)(4,3),那么制作顺序是1,5,2,4,31,5,2,4,31,5,2,4,3

例 1 里,首先考虑111,因为有限制(3,1)(3,1)(3,1)(4,1)(4,1)(4,1),所以只有制作完333444后才能制作111,而根据 3,333号又应尽量比444号优先,所以当前可确定前三道菜的制作顺序是3,4,13,4,13,4,1;接下来考虑222,确定最终的制作顺序是3,4,1,23,4,1,23,4,1,2

222里,首先制作111是不违背限制的;接下来考虑222时有(5,2)(5,2)(5,2)的限制,所以接下来先制作555再制作222;接下来考虑333时有(4,3)(4,3)(4,3)的限制,所以接下来先制作444再制作333,从而最终的顺序是1,5,2,4,31,5,2,4,31,5,2,4,3。现在你需要求出这个最优的菜肴制作顺序。无解输出Impossible!(首字母大写,其余字母小写)

输入格式

第一行是一个正整数ttt,表示数据组数。接下来是ttt组数据。对于每组数据:第一行两个用空格分开的正整数nnnmmm,分别表示菜肴数目和制作顺序限制的条目数。接下来mmm行,每行两个正整数x,yx,yx,y,表示xxx号菜肴必须先于yyy号菜肴制作的限制。

输出格式

输出文件仅包含ttt行,每行nnn个整数,表示最优的菜肴制作顺序,或者Impossible!表示无解。

输入输出样例 #1

输入 #1

3 5 4 5 4 5 3 4 2 3 2 3 3 1 2 2 3 3 1 5 2 5 2 4 3

输出 #1

1 5 3 4 2 Impossible! 1 5 2 4 3

说明/提示

【样例解释】

第二组数据同时要求菜肴111先于菜肴222制作,菜肴222先于菜肴333制作,菜肴333先于菜肴111制作,而这是无论如何也不可能满足的,从而导致无解。

【数据范围】

100%100\%100%的数据满足n,m≤105n,m\le 10^5n,m1051≤t≤31\le t\le 31t3

mmm条限制中可能存在完全相同的限制。

C++实现

#include<bits/stdc++.h>usingnamespacestd;constintN=1e5+10;intt,n,m,x,y,cnt;intin[N],ans[N];vector<int>vec[N];priority_queue<int,vector<int>,less<int>>que;//也可以写成默认状态priority_queue<int>que;intmain(){ios::sync_with_stdio(false);cin.tie(NULL);cout.tie(NULL);cin>>t;while(t--){cin>>n>>m;cnt=0;for(inti=1;i<=n;i++)ans[i]=in[i]=0;for(inti=1;i<=n;i++)vec[i].clear();//多测不清空,十年OI一场空for(inti=1;i<=m;i++){cin>>x>>y;in[x]++;vec[y].push_back(x);//反向建边}for(inti=1;i<=n;i++)if(!in[i])que.push(i);while(!que.empty()){intu=que.top();//优先队列打乱了原序,所以只能用top,而不能用front!!!que.pop();for(inti=0;i<vec[u].size();i++){intx=vec[u][i];in[x]--;//解放连边if(!in[x])que.push(x);}ans[++cnt]=u;//记录答案}if(cnt<n)cout<<"Impossible!";elsefor(inti=cnt;i>=1;i--)//倒着输出,原因看“算法分析”cout<<ans[i]<<" ";cout<<endl;}return0;}

后续

接下来我会不断用C++来实现信奥比赛中的算法题、GESP考级编程题实现、白名单赛事考题实现,记录日常的编程生活、比赛心得,感兴趣的请关注,我后续将继续分享相关内容

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

信息获取的范式革命:AI搜索如何重塑人类认知方式

引言&#xff1a;从工具到认知伙伴的转变当古希腊学者在亚历山大图书馆的卷轴中寻找智慧&#xff0c;当文艺复兴时期的思想家在私人藏书室中探索知识&#xff0c;当二十世纪末的人们通过关键字在初代搜索引擎中检索信息&#xff0c;人类获取知识的方式始终在演进。今天&#xf…

作者头像 李华
网站建设 2026/4/1 16:41:35

认知不平等与数字鸿沟:AI搜索时代的知识获取伦理

引言&#xff1a;当知识获取成为特权在前数字时代&#xff0c;知识获取的不平等主要受制于物理条件——图书馆的远近、书籍的价格、教育机会的分配。互联网时代似乎承诺了知识的民主化&#xff0c;但数字鸿沟随即出现。如今&#xff0c;AI搜索技术的兴起正在创建新一轮的认知不…

作者头像 李华
网站建设 2026/4/5 10:54:13

教育的范式转移:AI搜索如何重塑学习与教学

引言&#xff1a;从知识传输到认知导航的教育革命两千多年来&#xff0c;教育的基本模式围绕一个核心假设&#xff1a;知识是稀缺的&#xff0c;教师是知识的主要持有者和传输者。这一假设塑造了教室的物理布局、课程的层级结构、评估的标准方法。然而&#xff0c;AI搜索技术的…

作者头像 李华
网站建设 2026/3/14 7:49:16

Obsidian 看板 + Copilot:项目管理与每日总结的完美闭环

在多项目并行的职场节奏中&#xff0c;项目管理是每个人的必修课。我曾深陷“工具选择困难症”&#xff0c;在滴答清单、Notion 等工具间反复横跳。虽然滴答清单足够优秀&#xff0c;但它始终无法与我的个人知识库深度联动&#xff0c;更难以调用 AI 能力来二次加工我的工作轨迹…

作者头像 李华
网站建设 2026/4/5 0:04:39

涡流传感器金属探测识别检测金银铜铁STM32/51单片机DIY设计模块(设计源文件+万字报告+讲解)(支持资料、图片参考_相关定制)_文章底部可以扫码

涡流传感器金属探测识别检测金银铜铁STM32/51单片机DIY设计模块产品功能描述&#xff1a; 涡流传感器金属检测工作原理&#xff1a; 根据法拉利电磁感应定律&#xff0c;金属导体置于变化的磁场中或者在磁场中作切割磁力线运动时&#xff0c;导体内将产生呈涡旋状的感应电流&am…

作者头像 李华
网站建设 2026/4/1 6:03:09

51单片机便携式红外非接触人体测温仪阈值报警91(设计源文件+万字报告+讲解)(支持资料、图片参考_相关定制)_文章底部可以扫码

51单片机便携式红外非接触人体测温仪阈值报警91(设计源文件万字报告讲解)&#xff08;支持资料、图片参考_相关定制&#xff09;_文章底部可以扫码产品功能描述&#xff1a; 本系统由STC89C52单片机、lcd1602液晶、MLX90614ESF红外非接触温度检测、按键、&#xff08;无线蓝牙/…

作者头像 李华