团购信息

当前位置:主页 > 团购信息 >

【BZOJ 4010】 [HNOI2015]菜肴制作

4010: [HNOI2015]菜肴制作

Time Limit: 5 Sec Memory Limit: 512 MB
Submit: 426 Solved: 242
[提到] [叙述] [议论]
Description

著名的美味美肴小 A被约请到自动出纳机 大酒店,回顾菜肴。

ATM 这家旅社很小。 A 预备了 N 道菜肴,按照菜品的大规模的,餐厅的大规模的是高的
1到n的序列号,无上的预测大规模的为1。菜肴词的搭配成绩,
有些菜不可避免的在另一道菜先前做。,详细的,一公共的 M 比方我吧 不可避免的有数字菜
先于 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。
现时你必提出要求出这样最优的菜肴制作按次。不值得讨论的处理的输入!” (没单引号,
首字母的大写,其他的字母都是小写字母字母。
Input

高音的行是无符号完整的D。,表现知识组的数量。

接下降是D组知识。
到某种状态每一组知识:
由打孔断绝的高音的行两个无符号完整的n和m,预示菜品总共和制造按次的限度局限
条意志总共。
下任一M线,每行两个无符号完整的x,y,表现“x号菜肴不可避免的先于y号菜肴制作”
的限度局限。(注:在M限度局限中能够有完全相同的限度局限。
Output

输入证件只牵制 D 行,每行 N 个完整的,表现最优的菜肴制作按次,或

者”Impossible!”表现无解(没单引号)。
Sample Input

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
Sample Output

1 5 3 4 2

Impossible!

1 5 2 4 3
HINT

[范本阐明]

第二的套知识也提出要求菜肴前1菜2。,烹前2道菜3,饭前3

做1道菜,这在少许健康状况下都是不值得讨论的充分发挥潜在的能力的。,如下理由无法处理的。

100%的知识充分发挥潜在的能力N,M<=100000,D<=3。

思惟 拓扑排序。

关怀主旨不必要最小的字典按次,更准确来说,较小的节必要在前面。。
如图:
这里写图片描述
答案是52431,和字典序最小的是43521。

最大的字典按次相当于相反的按次。,因字典的按次尽量小。,这是最小的一任一某一在前面尽量。。

乃,字典按次的最大拓扑排序可以停止B。


using namespace std;
priority_queue<int> q;
struct edge
{
    inty,ne;
}e[M];
int 杜[米],h[M],ANS[M ],tot,D,n,m;
void read(int TMP)
{
    tmp=0;
    char ch=getchar();
    for (;ch<'0'||ch>'9';ch=getchar());
    for (;ch>='0'&&ch<='9';ch=getchar())
        tmp=tmp*10+ch-'0';
}
void Addedge(intx,inty)
{
    E[  TOT]y=y;
    E [ TOT ]ne=h[x];
    h[x]=tot;
    du[y]++;
}
int main()
{
    read(D);
    while (D--)
    {
        tot=0;
        read(n),read(m);
        for (int i=1;i<=n;i++)
            du[i]=h[i]=0;
        for (int i=1;i<=m;i++)
        {
            intx,y;
            read(x),read(y);
            Addedge(y,x);
        }
        int now=0;
        for (int i=1;i<=n;i++)
            if (!杜伊[我] q.push(i);
        while (!q.empty())
        {
            intx=q.top();
            q.pop();
            ANN[  现时]x;
            for (int i=h[x];i;i=e[i].ne)
            {
                inty=e[i].y;
                du[y]--;
                if (!du[y]) q.push(y);
            }
        }
        if (now==n)
        {
            for (int i=n;i>=1;i--)
                printf("%d ",ANS[I]
            printf("
");
        }
        elseprintf("Impossible!
");
    }
    return0;
}

这里写图片描述

咨询热线:  Copyright © 2016-2017 百家乐平注常赢玩法 - 百家乐怎么玩 版权所有