传送门

把时间看成数,菜肴看成位置

考虑一个位置填什么数很麻烦

考虑一个数放在什么位置

一开始我想的是,对于一个限制 $(a,b)$ ,从 $a$ 往 $b$ 连一条边,然后如果有解则所有的限制构成了一个 $DAG$

考虑当前最小的数给谁,显然是当前没有入度的且编号最小的点

所以可以直接按拓扑序把数一个个 '给' 过去,并用升序的优先队列维护当前没有入度的位置最小的点

然后就 $GG$ 了

随手一个数据就可以 $hack$ 掉 :

$4\ 2$

$1\ 3$

$4\ 2$

正确答案:1 3 4 2,错误输出:1 4 2 3

考虑一下为什么会 $GG$

一开始 $1,4$ 没有入度,队列中: $1,4$

把 $1$ 取出来,然后 $3$ 也没有入度,队列中 $3,4$

把 $3$ 取出来,队列中 $4$

把 $4$ 取出来,$2$ 没有入度,队列中 $2$

把 $2$ 取出来,结束

分析一下问题出在哪,$4$,指向一个小于 $3$ 的节点$2$,如果先把 $4$ 取走,那么 $2$ 的编号就会比较小

就是说,一开始数 $a$ 给了位置 $p$,然后 $a+1$ 给位置 $pr,(pr>p)$,然后因为 $pr$ 有一条边连给 $pl,(pl<p)$,所以 $a+2$ 给 $pl$,导致 $GG$

考虑反过来,把 $DAG$ 反过来,最大值先 '给' 位置最大的数,用降序优先队列维护当前没有入度的位置最大的点

这样就可以避免出现这种情况

然后就可以了

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<cmath>
#include<vector>
#include<queue>
using namespace std;
typedef long long ll;
inline int read()
{int x=0,f=1; char ch=getchar();while(ch<'0'||ch>'9') { if(ch=='-') f=-1; ch=getchar(); }while(ch>='0'&&ch<='9') { x=(x<<1)+(x<<3)+(ch^48); ch=getchar(); }return x*f;
}
const int N=1e5+7;
int n,m,cnt[N],pos[N],ans[N],now;
vector <int> v[N];
priority_queue <int> q;
int main()
{int T=read();while(T--){n=read(),m=read();for(int i=1;i<=n;i++) cnt[i]=pos[i]=ans[i]=0,v[i].clear();int a,b;for(int i=1;i<=m;i++){a=read(),b=read();v[b].push_back(a); cnt[a]++;}for(int i=1;i<=n;i++) if(!cnt[i]) q.push(i);now=n;while(!q.empty()){int x=q.top(); pos[x]=now--; q.pop();for(int i=v[x].size()-1;i>=0;i--){cnt[v[x][i]]--;if(!cnt[v[x][i]]) q.push(v[x][i]);}}bool flag=1;for(int i=1;i<=n;i++) if(!pos[i]) { printf("Impossible!\n"); flag=0; break; }if(!flag) continue;for(int i=1;i<=n;i++) ans[pos[i]]=i;for(int i=1;i<=n;i++) printf("%d ",ans[i]); printf("\n");}return 0;
}

转载于:https://www.cnblogs.com/LLTYYC/p/10661194.html

P3243 [HNOI2015]菜肴制作相关推荐

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

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

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

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

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

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

  4. 洛谷P3243 [HNOI2015]菜肴制作——拓扑排序

    题目:https://www.luogu.org/problemnew/show/P3243 正向按字典序拓扑排序很容易发现是不对的,因为并不是序号小的一定先做: 但若让序号大的尽可能放在后面,则不会 ...

  5. 洛谷P3243 [HNOI2015]菜肴制作(思维+反向拓扑)

    传送门 听说原本是紫题 需要先做 i i i 再做 j j j 的限制很自然的让人想到了拓扑排序,然而让编号较小的菜肴尽可能较早输出并不是要求得到最小字典序的答案!! 反面样例可见第三组输入数据,若按 ...

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

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

  7. 洛谷:P3243 [HNOI2015]菜肴制作(拓扑序列、建反图、贪心)

    美食家老嗨 题意: 很容易读偏,以为是求满足限制下的最小字典序. 要求是在满足所有限制后,优先做 1,此外优先做 2 - -- 摘自xyz32768 C o d e : Code: Code: #in ...

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

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

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

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

最新文章

  1. 手写体数字识别(理解起来更简单一点)
  2. springMVC笔记day01
  3. numpy 辨异(二) —— np.identity()/np.eye()
  4. 2021技术文大盘点 | 打包过去,​面向未来
  5. html地图缩放比例,百度地图之添加控件——比例尺、缩略图、平移缩放
  6. MySQL学习笔记_关于MySQL的字符类型VARCHAR长度知识总结
  7. JAVA——实验肆——多线程
  8. AMQP Connection 127.0.0.1:5672] ERROR [o.s.a.rabbit.connection.CachingConnectionFactory] CachingConn
  9. bzoj 4818: [Sdoi2017]序列计数(DP+矩阵快速幂)
  10. 【sklearn第二十四讲】密度估计
  11. 微信小程序——诉讼费计算
  12. 【图像配准】基于matlab Harris+SIFT图像配准【含Matlab源码 1532期】
  13. 《Java就业培训教程》_张孝祥_书内源码_04
  14. solus linux下载链接,Solus Linux下载_Solus 4.0 最新版_零度软件园
  15. Linux —— 时间问题(localtime和gmtime)
  16. Java-数组和方法(day6-7)
  17. <视觉>——Ground truth的含义
  18. 智慧农场、智慧农业管理系统、农作物、农技指导、四防棚、农耕、种植、农事执行、地块、圈地、加热温室、圈养、生产、采收记录、采收计划、采收入库、销售、农资溯源记录、农场日志、axure原型、产品原型、rp
  19. grep完全匹配及精确匹配实验
  20. 天龙八部科举答题问题和答案(全5/8)

热门文章

  1. 数据库技巧:整理SQLServer非常实用的脚本
  2. 信息技术必修丨网络域名
  3. 码云Pages搭建个人静态网站之旅
  4. Linux调整挂载磁盘分区大小
  5. 原生js事件绑定和事件移除
  6. 华捷艾米a200摄像头_华捷艾米:3D MR打破行业边界,优化产业结构,让生活更美好...
  7. css伪元素层级在父元素之下
  8. IBM worksoft
  9. 苹果WWDC2023:首款MR头显震撼发布,开发者泪洒现场,一文读懂全新产品及创新功能
  10. Android 增量编译总结