题目名称 1958. [HNOI 2015]菜肴制作
输入输出 dishes.in/out
难度等级 ★★☆
时间限制 2000 ms (2 s)
内存限制 512 MiB
测试数据 20
题目来源 Gravatarcstdio 于2015-04-27加入
开放分组 全部用户
提交状态
分类标签
拓扑排序 优先队列 反图
分享题解
通过:76, 提交:153, 通过率:49.67%
GravatarTAT 100 0.292 s 7.15 MiB C++
GravatarYoungsc 100 0.335 s 0.56 MiB C++
GravatarZRQ 100 0.350 s 2.79 MiB C++
Gravatar~玖湫~ 100 0.375 s 1.24 MiB C++
Gravatarchenhongkan 100 0.394 s 2.22 MiB C++
GravatarZXCVBNM_1 100 0.395 s 2.60 MiB C++
GravatarBaDBoY 100 0.397 s 1.08 MiB C++
GravatarHzoi_Mafia 100 0.400 s 0.78 MiB C++
GravatarBaDBoY 100 0.400 s 0.92 MiB C++
GravatarGintoki 100 0.403 s 3.34 MiB C++
本题关联比赛
EYOI与SBOI开学欢乐赛8th
关于 菜肴制作 的近10条评论(全部评论)
回复 @하루Kiev :
%dalao
GravatarHzoi_QTY
2017-08-23 16:05 6楼
这么简单?
Gravatar하루Kiev
2017-08-12 16:14 5楼
正解是反着来的,用大根堆,逆向建边,而最后反向输出!!!如果正着找,可能会忽略后面的更小值,而更小值优先级大于当前较小值,错解。而如果反向找最大,最小的一定找到的较后,而最大值被忽略,但最大值的优先级小于较大值,那么最大值被忽略就是可以的。所以证明反向是对的。
GravatarHzoi_QTY
2017-08-11 19:27 4楼
GravatarAnonymity
2017-08-11 19:11 3楼
回复 @呵呵酵母菌 :
MDZZ
GravatarHallmeow
2017-08-11 16:35 2楼
终于没人说话了
Gravatar呵呵酵母菌
2017-08-11 15:33 1楼

1958. [HNOI 2015]菜肴制作

★★☆   输入文件:dishes.in   输出文件:dishes.out   简单对比
时间限制:2 s   内存限制:512 MiB

【题目描述】

知名美食家小 $A$ 被邀请至 $ATM$ 大酒店,为其品评菜肴。


$ATM$ 酒店为小 $A$ 准备了 $N$ 道菜肴,酒店按照为菜肴预估的质量从高到低给予 $1$ 到 $N$ 的顺序编号,预估质量最高的菜肴编号为 $1$。由于菜肴之间口味搭配的问题,某些菜肴必须在另一些菜肴之前制作,具体的,一共有 $M$ 条形如“$i$ 号菜肴‘必须’先于 $j$ 号菜肴制作”的限制,我们将这样的限制简写为$<i,j>$。


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

$(1)$在满足所有限制的前提下,$1$ 号菜肴“尽量”优先制作;

$(2)$在满足所有限制,$1$ 号菜肴“尽量”优先制作的前提下,$2$号菜肴“尽量”优先制作;

$(3)$在满足所有限制,$1$ 号和 $2$ 号菜肴“尽量”优先的前提下,$3$ 号菜肴“尽量”优先制作;

$(4)$在满足所有限制,$1$ 号和 $2$ 号和 $3$ 号菜肴“尽量”优先的前提下,$4$ 号菜肴“尽量”优先制作;

$(5)$以此类推。 

例$1$:共 $4$ 道菜肴,两条限制$<3,1>、<4,1>$,那么制作顺序是 $3,4,1,2$。例$2$:共 $5$ 道菜肴,两条限制$<5,2>、 <4,3>$,那么制作顺序是 $1,5,2,4,3$。

例$1$里,首先考虑 $1$,因为有限制$<3,1>$和$<4,1>$,所以只有制作完 $3$ 和 $4$ 后才能制作 $1$,而根据$(3)$,$3$ 号又应“尽量”比 $4$ 号优先,所以当前可确定前三道菜的制作顺序是 $3,4,1$;接下来考虑$2$,确定最终的制作顺序是 $3,4,1,2$。例 $2$ 里,首先制作 $1$ 是不违背限制的;接下来考虑 $2$ 时有$<5,2>$的限制,所以接下来先制作 $5$ 再制作 $2$;接下来考虑 $3$ 时有$<4,3>$的限制,所以接下来先制作 $4$ 再制作 $3$,从而最终的顺序是 $1,5,2,4,3$。 

现在你需要求出这个最优的菜肴制作顺序。

无解输出“$Impossible!$” (不含引号,首字母大写,其余字母小写) 

【输入格式】

第一行是一个正整数 $D$,表示数据组数;

接下来是 $D$ 组数据,对于每组数据: 

第一行两个用空格分开的正整数 $N$ 和 $M$,分别表示菜肴数目和制作顺序限制的条目数。

接下来 $M$ 行,每行两个正整数$x,y$,表示“$x$ 号菜肴必须先于 $y$ 号菜肴制作”的限制。

(注意:$M$ 条限制中可能存在完全相同的限制) 

【输出格式】

 输出文件仅包含 $D$ 行,每行 $N$ 个整数,表示最优的菜肴制作顺序,或者“$Impossible!$”表示无解(不含引号)。 

【样例输入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 

【样例1说明】

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

$30 \%$的数据满足 $N,M<=200,D<=3$;

$70 \%$的数据满足$N,M<=5000,D<=3$;

$100 \%$的数据满足$N,M<=100000,D<=3$。