知名美食家小 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!“ (不含引号,首字母大写,其余字母小写)

TopSort好题:
我最先想的是:
把stack换成priority_queue然后这样解决的是字典序最小
但是这连样例都过不去。
你要的是让答案竟可能小:
所以考虑反图
让后面竟可能大:
大根堆倒着输出答案完。
有环就推出。

#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
#include<queue>
using namespace std;
const int N=1e5+100;
inline void read(int &x){x=0;int f=1;char ch=getchar();while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}x*=f;
}
struct Front_star{int u,v,nxt;
}e[N<<2];
int cnt=0;
int first[N];
void add(int u,int v){++cnt;e[cnt].u=u;e[cnt].v=v;e[cnt].nxt=first[u];first[u]=cnt;
}
//
int n,m;
priority_queue<int/*,vector<int>,greater<int> */> Q;
int Du[N];
int ans[N];
void Clr(){memset(ans,0,sizeof(ans));memset(Du,0,sizeof(Du));memset(first,0,sizeof(first));cnt=0;
}
void Topsort(){for(int i=1;i<=n;++i){if(!Du[i])Q.push(i);}while(!Q.empty()){int x=Q.top();Q.pop();ans[++ans[0]]=x;for(int i=first[x];i;i=e[i].nxt){int v=e[i].v;Du[v]--;if(!Du[v])Q.push(v);}}if(ans[0]==n){for(int i=n;i>=1;--i){cout<<ans[i]<<" ";}cout<<'\n';}else{cout<<"Impossible!"<<'\n';}
}
void Init(){read(n);read(m);for(int i=1;i<=m;++i){int u,v;read(u);read(v);Du[u]++;add(v,u);}
}
int main(){
//  freopen("test.in","r",stdin);int Cas;read(Cas);while(Cas--){Clr();Init();Topsort();}
}

转载于:https://www.cnblogs.com/Leo-JAM/p/10079065.html

省选专练[HNOI2015]菜肴制作相关推荐

  1. 刷题记录(NC20115 [HNOI2015]菜肴制作)

    NC20115 [HNOI2015]菜肴制作 题目链接 关键点: 1.题目要求在给定某些菜品的先后顺序下,并且满足号小的尽量在前的最优顺序 2.对于某些菜品有先后顺序,这就很容易想到拓扑排序,对于有先 ...

  2. bzoj 4010: [HNOI2015]菜肴制作 拓扑排序

    4010: [HNOI2015]菜肴制作 Time Limit: 20 Sec  Memory Limit: 256 MB 题目连接 http://www.lydsy.com/JudgeOnline/ ...

  3. 【BZOJ 4010】 [HNOI2015]菜肴制作

    4010: [HNOI2015]菜肴制作 Time Limit: 5 Sec Memory Limit: 512 MB Submit: 426 Solved: 242 [Submit][Status] ...

  4. P3243 [HNOI2015]菜肴制作(拓扑排序)

    P3243 [HNOI2015]菜肴制作 题目误导你正着做拓扑排序,然鹅你可以手造数据推翻它.于是就只能倒着做 我们开个优先队列,每次把可填的最大的编号取出来搞,最后倒着输出拓扑序就好辣 #inclu ...

  5. P3243 [HNOI2015]菜肴制作 (拓扑排序)

    [HNOI2015]菜肴制作 - 洛谷 建反图跑字典序最大top_sort即可. /*keep on going and never give up*/ #include<bits/stdc++ ...

  6. P3243 [HNOI2015]菜肴制作(拓扑 + 优先队列)

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

  7. 【luoguP3243】[HNOI2015]菜肴制作--拓扑排序

    题目描述 知名美食家小 A被邀请至ATM 大酒店,为其品评菜肴. ATM 酒店为小 A 准备了 N 道菜肴,酒店按照为菜肴预估的质量从高到低给予1到N的顺序编号,预估质量最高的菜肴编号为1. 由于菜肴 ...

  8. P3243 [HNOI2015]菜肴制作(拓扑排序、贪心)

    解析 很好的题 也就是我没做出来的意思 反向思维似乎是我欠缺的 这道题也是 也许做题时应该多特意往这边想想 当正向看并没有太好的性质时,也许反过来能使题目豁然开朗 容易想到暴力n方如何做 (以下均指反 ...

  9. R6饮料AK赛(NOIP模拟赛)/省选专练HDU 5713 K个联通块

    我好菜啊100+60+30 滚犊子吧,两天加起来才410搞个屁我一年前都可以考400 不说了,题毕竟比较难 T1还是水题但是比昨天难 这是一个开绝对值不等式的题. 根据对奇数和偶数的最优根的归纳一定有 ...

  10. 省选专练之文艺计算姬

    "奋战三星期,造台计算机".小W响应号召,花了三星期造了台文艺计算姬. 文艺计算姬比普通计算机有更多的艺术细胞. 普通计算机能计算一个带标号完全图的生成树个数,而文艺计算姬能计算一 ...

最新文章

  1. 这 3 个字是未来发展关键,不重视的企业,正在被淘汰
  2. springboot整合mybatis增删改查(三):mybatis逆向工程
  3. 【AutoML】强化学习如何用于模型蒸馏?
  4. python的shutil模块是内置的_Python之shutil模块11个常用函数详解,python内置函数是什么...
  5. vs2008打开vs2010工程项目
  6. php中用for循环制作矩形,PHP中for循环语句的几种变型
  7. Flink之Watermark滑动窗口案例
  8. 5.3.6 原子操作对非原子的操作排序
  9. html5的video怎么把里面的控制器移出来_电动车突然不走了,但控制器和转把没坏,但车走电,这是怎么回事...
  10. 做双网卡绑定_______物理机在双网卡的情况下做多IP绑定
  11. 转:计算机核心刊物(非SCI,EI)投稿指南
  12. Chrome查看HTTP版本
  13. php rsa2 pkcs8,关于pkcs8 与 rsa 互转的一个坑
  14. IEEE trans模板格式中左下角添加脚注的方法
  15. 模式与数据库与表的关系
  16. 超有范的 logo 在线设计制作工具
  17. 如何在PHP中使用Modulo运算符
  18. html+css精致的登录页面 (含源码的哦)
  19. 自平衡小车TB6612FNG驱动直流电机控制接线介绍
  20. vba 邮件body html,Excel VBA中的Outlook电子邮件和签名 - .Body vs .HTMLbody

热门文章

  1. [SPM_hw1]记一次项目经历
  2. Android Studio系列教程六--Gradle多渠道打包
  3. 在类库中使用Session
  4. Blocks的申明调用与Queue当做锁的用法
  5. CSS如何让图片垂直并水平居中等比缩放?
  6. Shanda EZ Mini
  7. 根据文件名 kill 进程
  8. CUDA 和 GPU
  9. EMNLP 2020 | RecAdam: 在更少的遗忘下精调预训练语言模型
  10. PyTorch学习—12.损失函数