题解 P3243 【[HNOI2015]菜肴制作】】的更多相关文章

P3243 [HNOI2015]菜肴制作 题目误导你正着做拓扑排序,然鹅你可以手造数据推翻它.于是就只能倒着做 我们开个优先队列,每次把可填的最大的编号取出来搞,最后倒着输出拓扑序就好辣 #include <iostream> #include <cstdio> #include <cstring> #include <queue> using namespace std; #define N 100005 int n, m, tp, Q[N], in[N]…
[题解][HNOI2015]菜肴制作(贪心+topo序) 题意:请你构造一个排列\(p[i]\)使得对于数组\(arc[i]=p[i]\)的字典序最小,并且对于给定的有序数对\((u,v)\)保证你给出的排列\(u\)早于\(v\)出现. 结论:\(u->v\)连边的反图的最大拓扑序的reverse 证明:这个排列的合法性是显然的,因为是topo序.下证不存在一个更优排列\(p[]\)使得\(arc[]\)字典序更小. 考虑反证,假设存在一个更优排列\(p'[]\)比我们如上算法得到的\(p[]…
题目描述 知名美食家小 A被邀请至ATM 大酒店,为其品评菜肴. ATM 酒店为小 A 准备了 N 道菜肴,酒店按照为菜肴预估的质量从高到低给予1到N的顺序编号,预估质量最高的菜肴编号为1. 由于菜肴之间口味搭配的问题,某些菜肴必须在另一些菜肴之前制作,具体的,一共有 M 条形如”i 号菜肴'必须'先于 j 号菜肴制作“的限制,我们将这样的限制简写为<i,j>. 现在,酒店希望能求出一个最优的菜肴的制作顺序,使得小 A能尽量先吃到质量高的菜肴: 也就是说, (1)在满足所有限制的前提下,1 号…
每日一题 day60 打卡 Analysis 这道题一看就感觉是个拓扑排序,但因为按字典序最小的排序会有问题(见第三个样例)主要原因是每次选择有后效性,而从后往前就不会存在这个问题,因为每个子任务都是一个点. 于是就是一个裸的拓扑排序了. #include<iostream> #include<cstdio> #include<cstring> #include<algorithm> #include<queue> #define int lon…
传送门 把时间看成数,菜肴看成位置 考虑一个位置填什么数很麻烦 考虑一个数放在什么位置 一开始我想的是,对于一个限制 $(a,b)$ ,从 $a$ 往 $b$ 连一条边,然后如果有解则所有的限制构成了一个 $DAG$ 考虑当前最小的数给谁,显然是当前没有入度的且编号最小的点 所以可以直接按拓扑序把数一个个 '给' 过去,并用升序的优先队列维护当前没有入度的位置最小的点 然后就 $GG$ 了 随手一个数据就可以 $hack$ 掉 : $4\ 2$ $1\ 3$ $4\ 2$ 正确答案:1 3 4…
题目:https://www.luogu.org/problemnew/show/P3243 正向按字典序拓扑排序很容易发现是不对的,因为并不是序号小的一定先做: 但若让序号大的尽可能放在后面,则不会有什么问题,因为它不影响它前面的选择: 我们可以建反图,从后往前按序号从大到小排序,倒序输出答案,这样就把序号大的尽量放在后面了. 代码如下: #include<iostream> #include<cstdio> #include<cstring> #include<…
这题一看就知道和拓扑序有关 考虑拓扑排序的时候每次取队列里最小的数进行排序 然后就\(\mathcal{GG}\)了,因为这样只能使字典序最小,而并不能保证题目中要求的每个编号的数要在满足前面数尽量在前面的同时自己尽量在前面 例如 Input 5 2 5 2 4 3 Wrong Output 1 4 3 5 2 Correct Output 1 5 2 4 3 我这里先是想从小到大依次考虑每个数,把这个数在\(DAG\)上的前驱全部用前面方法贪心取出,然后取出该数,但这样做比较复杂 然后如果把这…
正解:拓扑排序 解题报告: 传送门! 首先看到它这个约束就应该要想到拓扑排序辣QwQ 首先想到的应该是用优先队列代替队列,按照节点编号排序 然后也很容易被hack:<5,1> 正解应为5,1,2,3,4 但是上面这个想法的结果是2,3,4,5,1 那就想要不优化一下趴,按照能到达的点为第一关键字,自己点的编号为第二关键字排序呢 还是布星,,,<5,2><5,4><2,1><4,3><3,1> 正解应为5,2,1,4,3,但是上面这个想…
Background\text{Background}Background I've got that Luogu Dialy has been \text{I've got that Luogu Dialy has been }I've got that Luogu Dialy has been updated\text{updated}updated this morning.\text{ this morning.} this morning. So I decided to learn …
这道题的贪心思路可真是很难证明啊...... 对于<i,j>的限制(i必须在j之前),容易想到topsort,每次在入度为0的点中选取最小的.但这种正向找是错误的,题目要求的是小的节点尽量往前,并不是字典序最小.<i,j>中i肯定大于j,这样建的图中小的节点是靠后的,当然不行:那我们考虑反向建图,那么小的节点就靠前了,因为是反向建图,我们要让大的节点尽量往前,最后倒着输出,那么小的节点自然就靠前了. 有种重要的思路就是正的不行那就反着来,考场上实在不能证明,那就多举几个例子看是否正…