P3243-[HNOI2015]菜肴制作【拓扑排序,优先队列】
正题
题目链接:https://www.luogu.com.cn/problem/P3243
题目大意
nnn个数,有mmm个要求形如xxx在yyy的前面,现在要求在i−1i-1i−1尽量靠前的情况下iii尽量靠前(i>1)(i>1)(i>1)
求这个序列
解题思路
这个很显然要求是张有向图无环图,然后若第iii个数排在第xxx位,那么pi=xp_i=xpi=x,那么就是要求ppp的字典序最小。但是发现如果直接拓扑排序+优先队列就会导致拓扑序的字典序最小,不符合题意,但是如果我们将拓扑图反过来跑就是正确答案了。
这样子跑是保证了反过来的字典序最大,那么小的一定在后面也就是保证了反过来后pip_ipi小的一定在前面。
时间复杂度O(n)O(n)O(n)
codecodecode
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<queue>
using namespace std;
const int N=1e5+10;
struct node{int to,next;
}a[N];
int T,n,m,tot,cnt,in[N],ls[N],top[N];
priority_queue<int> q;
void addl(int x,int y){a[++tot].to=y;a[tot].next=ls[x];ls[x]=tot;in[y]++;return;
}
void topsort(){for(int i=1;i<=n;i++)if(!in[i])q.push(i);while(!q.empty()){int x=q.top();top[++cnt]=x;q.pop();for(int i=ls[x];i;i=a[i].next){int y=a[i].to;in[y]--;if(!in[y])q.push(y);}}return;
}
int main()
{scanf("%d",&T);while(T--){tot=cnt=0;memset(ls,0,sizeof(ls));memset(in,0,sizeof(in));scanf("%d%d",&n,&m);for(int i=1;i<=m;i++){int x,y;scanf("%d%d",&x,&y);addl(y,x);}topsort();if(cnt!=n)printf("Impossible!");else{for(int i=n;i>=1;i--)printf("%d ",top[i]);}putchar('\n');}return 0;
}
P3243-[HNOI2015]菜肴制作【拓扑排序,优先队列】相关推荐
- 洛谷P3243 [HNOI2015]菜肴制作——拓扑排序
题目:https://www.luogu.org/problemnew/show/P3243 正向按字典序拓扑排序很容易发现是不对的,因为并不是序号小的一定先做: 但若让序号大的尽可能放在后面,则不会 ...
- bzoj 4010: [HNOI2015]菜肴制作 拓扑排序
4010: [HNOI2015]菜肴制作 Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://www.lydsy.com/JudgeOnline/ ...
- 【luoguP3243】[HNOI2015]菜肴制作--拓扑排序
题目描述 知名美食家小 A被邀请至ATM 大酒店,为其品评菜肴. ATM 酒店为小 A 准备了 N 道菜肴,酒店按照为菜肴预估的质量从高到低给予1到N的顺序编号,预估质量最高的菜肴编号为1. 由于菜肴 ...
- P3243 [HNOI2015]菜肴制作(拓扑排序)
P3243 [HNOI2015]菜肴制作 题目误导你正着做拓扑排序,然鹅你可以手造数据推翻它.于是就只能倒着做 我们开个优先队列,每次把可填的最大的编号取出来搞,最后倒着输出拓扑序就好辣 #inclu ...
- P3243 [HNOI2015]菜肴制作 (拓扑排序)
[HNOI2015]菜肴制作 - 洛谷 建反图跑字典序最大top_sort即可. /*keep on going and never give up*/ #include<bits/stdc++ ...
- P3243 [HNOI2015]菜肴制作(拓扑 + 优先队列)
题目描述: 知名美食家小 A 被邀请至 ATM 大酒店,为其品评菜肴.ATM 酒店为小 A 准备了 n 道菜肴,酒店按照为菜肴预估的质量从高到低给予 1 到 n 的顺序编号,预估质量最高的菜肴编号为 ...
- 洛谷P3243 [HNOI2015]菜肴制作(思维+反向拓扑)
传送门 听说原本是紫题 需要先做 i i i 再做 j j j 的限制很自然的让人想到了拓扑排序,然而让编号较小的菜肴尽可能较早输出并不是要求得到最小字典序的答案!! 反面样例可见第三组输入数据,若按 ...
- B4010 菜肴制作 拓扑排序(附随机跳题代码)
今天写了一个自己的随机跳题小程序,第一次试发现跳的全是不可做题,但是在周围我一眼看见了这个题,不能说一眼看出来,但是也是比较有思路,所以就做他了! 做得比较顺利,做完之后美滋滋,突然发现样例第三组过不 ...
- P3243 [HNOI2015]菜肴制作(拓扑排序、贪心)
解析 很好的题 也就是我没做出来的意思 反向思维似乎是我欠缺的 这道题也是 也许做题时应该多特意往这边想想 当正向看并没有太好的性质时,也许反过来能使题目豁然开朗 容易想到暴力n方如何做 (以下均指反 ...
- 洛谷:P3243 [HNOI2015]菜肴制作(拓扑序列、建反图、贪心)
美食家老嗨 题意: 很容易读偏,以为是求满足限制下的最小字典序. 要求是在满足所有限制后,优先做 1,此外优先做 2 - -- 摘自xyz32768 C o d e : Code: Code: #in ...
最新文章
- java中抽象类的匿名子类和匿名对象
- 怎样用EA设计ER图
- VS2022 C28251 WinMain批注不一致的解决方法
- 在一周之内,快速看完整部教材,列出你不懂的5-10个问题。
- 小米小爱蓝牙音箱_UG绘制一个小米小爱同学蓝牙音箱
- Jessica Kerr:高绩效团队简史
- C++使用boost::bind 订阅消息中的返回函数传入多个参数
- 图形用户界面GUI会被淘汰吗
- vue 生成PDF(A4标准PDF分页)
- nbu里oracle备份al开头的,认识NBU备份Oracle时Code 29错误
- win7用友u8安装教程_win7系统安装用友u8的方法 win7用友u8安装教程
- 三年级优秀书籍推荐_三年级必读课外书5本 小学三年级必读优秀书目推荐
- autojs 串口通信 替代无障碍 串口
- SCRCPY与Android操作流程(华为手机) 原创超详细
- OSChina 周日乱弹 —— 生活就像巧克力
- html的表单可以加背景图片,如何装饰表单的背景和字符
- BFS和DFS算法原理(通俗易懂版)
- 自动控制原理笔记-根轨迹法
- Android-回传数据(装备选择)
- 2019年4月10日
热门文章
- lcd屏幕抖动_电视屏幕面板大科普!买电视之前必看!
- matlab 抽样判决代码,matlab抽样判决器
- promise 浏览器实现的源码_【大前端01-01】函数式编程与JS异步编程、手写Promise...
- 怎么让图片手机上排列_荣耀手机系列档次怎么排列?
- java string底层实现_Java-学习日记(Shell与String底层原理)
- linux truncate文件,linux系统编程:用truncate调整文件大小
- 存储mysql数据存在特殊字符时处理_SQL数据库对于保存特殊字符的解决办法
- [RabbitMQ]常用命令
- 数据结构与算法--B树原理及实现
- Redis底层实现--字符串