洛谷 P3243 【[HNOI2015]菜肴制作】
第一眼看到这题,顿时懵逼,一个 \(SB\) 拓扑序竟然是黑题,当场笑喷。
\(Of\) \(course\),这题我是用堆做的。(其实是优先队列,手写堆这么垃圾我怎么可能会用呢)
\((1)\) 首先建图。如果 \(x\) 需要在 \(y\) 前面,就从 \(y\) 向 \(x\) 连边。
\((2)\) 然后把没有入边的点先加入堆。每次从堆中取出最小的数记下来。
\((3)\) 然后把它连向的点全都入堆。直到堆空。如果取出的点不是 \(n\) 个就输出不可能。否则输出记下来的点就好了。
#include<cstdio>
#include<cstring>
#include<queue>
using namespace std;
const int MAX_N=100010;
struct EDGE{int v,nxt;
}e[MAX_N];
int d,n,m,in[MAX_N],cnt,head[MAX_N],a[MAX_N];
priority_queue<int> q;
inline int read(){int x=0,f=1;char c=getchar();while(c<'0'||c>'9'){if(c=='-'){f=-1;}c=getchar();}while(c>='0'&&c<='9'){x=(x<<1)+(x<<3)+c-'0';c=getchar();}return x*f;
}
void add(int u,int v){e[++cnt].v=v;e[cnt].nxt=head[u];head[u]=cnt;
}
bool bfs(){while(!q.empty()){int p=q.top();q.pop();cnt++;a[cnt]=p;for(int i=head[p];i;i=e[i].nxt){int v=e[i].v;in[v]--;if(!in[v]){q.push(v);}}}return cnt==n;
}
int main(){d=read();while(d--){memset(in,0,sizeof(in));memset(head,0,sizeof(head));cnt=0;n=read(),m=read();for(int i=1;i<=m;i++){int x,y;x=read(),y=read();add(y,x);in[x]++;}for(int i=1;i<=n;i++){if(!in[i]){q.push(i);}}cnt=0;if(bfs()){for(int i=n;i>=1;i--){printf("%d ",a[i]);}printf("\n");}else{printf("Impossible!\n");}}return 0;
}
/*
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 5 3 4 2
Impossible!
1 5 2 4 3
*/
转载于:https://www.cnblogs.com/errichto/p/11317983.html
洛谷 P3243 【[HNOI2015]菜肴制作】相关推荐
- 洛谷P3243 [HNOI2015]菜肴制作——拓扑排序
题目:https://www.luogu.org/problemnew/show/P3243 正向按字典序拓扑排序很容易发现是不对的,因为并不是序号小的一定先做: 但若让序号大的尽可能放在后面,则不会 ...
- 洛谷P3243 [HNOI2015]菜肴制作(思维+反向拓扑)
传送门 听说原本是紫题 需要先做 i i i 再做 j j j 的限制很自然的让人想到了拓扑排序,然而让编号较小的菜肴尽可能较早输出并不是要求得到最小字典序的答案!! 反面样例可见第三组输入数据,若按 ...
- P3243 [HNOI2015]菜肴制作(拓扑排序)
P3243 [HNOI2015]菜肴制作 题目误导你正着做拓扑排序,然鹅你可以手造数据推翻它.于是就只能倒着做 我们开个优先队列,每次把可填的最大的编号取出来搞,最后倒着输出拓扑序就好辣 #inclu ...
- P3243 [HNOI2015]菜肴制作 (拓扑排序)
[HNOI2015]菜肴制作 - 洛谷 建反图跑字典序最大top_sort即可. /*keep on going and never give up*/ #include<bits/stdc++ ...
- P3243 [HNOI2015]菜肴制作(拓扑 + 优先队列)
题目描述: 知名美食家小 A 被邀请至 ATM 大酒店,为其品评菜肴.ATM 酒店为小 A 准备了 n 道菜肴,酒店按照为菜肴预估的质量从高到低给予 1 到 n 的顺序编号,预估质量最高的菜肴编号为 ...
- 洛谷:P3243 [HNOI2015]菜肴制作(拓扑序列、建反图、贪心)
美食家老嗨 题意: 很容易读偏,以为是求满足限制下的最小字典序. 要求是在满足所有限制后,优先做 1,此外优先做 2 - -- 摘自xyz32768 C o d e : Code: Code: #in ...
- P3243 [HNOI2015]菜肴制作
传送门 把时间看成数,菜肴看成位置 考虑一个位置填什么数很麻烦 考虑一个数放在什么位置 一开始我想的是,对于一个限制 $(a,b)$ ,从 $a$ 往 $b$ 连一条边,然后如果有解则所有的限制构成了 ...
- P3243 [HNOI2015]菜肴制作(拓扑排序、贪心)
解析 很好的题 也就是我没做出来的意思 反向思维似乎是我欠缺的 这道题也是 也许做题时应该多特意往这边想想 当正向看并没有太好的性质时,也许反过来能使题目豁然开朗 容易想到暴力n方如何做 (以下均指反 ...
- bzoj 4010: [HNOI2015]菜肴制作 拓扑排序
4010: [HNOI2015]菜肴制作 Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://www.lydsy.com/JudgeOnline/ ...
- 【BZOJ 4010】 [HNOI2015]菜肴制作
4010: [HNOI2015]菜肴制作 Time Limit: 5 Sec Memory Limit: 512 MB Submit: 426 Solved: 242 [Submit][Status] ...
最新文章
- 在Markdown中用mermaid画流程图和ER图
- MATLAB功率谱函数psd与pwelch的使用
- 错误 No package ‘vulkan‘ found 解决办法
- 阿里面试经历JAVA总结
- Kubernetes 集群 DNS 服务发现原理
- 瞧瞧 Fog Creek 软件公司办公环境
- 有关fwrite语句的用法
- 阿里P8成长路线!我的头条面试经历分享,吊打面试官系列!
- 用VML画图(一些基本的矢量图)(转)
- php layui table,Layui table组件相关介绍
- 电视剧潜伏的真正结局
- java 轻量数据库_DBTree是一个springboot2 + vue-element-template实现的轻量数据库表结构查看及管理工具...
- [bz][LINUX command 002] 嵌入式常用的命令
- Zookeeper常用命令详解(Zookeeper3.6)
- word公式插件_全套office零基础视频教程|200集视频+插件+模板,免费送!
- sysbench线程数_分享3个Sysbench性能压测脚本及多并发压测过程
- Java 12 生字符串字面量
- VS Code Python “Statements must be separated by newlines or semicolons“
- html5音频剪辑,访谈类音频剪辑的5个小贴士
- 基于stm32的数控恒压恒流电源设计方案
热门文章
- .net 窗体清除上次显示的内容_access在系统右下角任务栏弹出消息提示窗体
- 『设计模式』反射,反射程序员的快乐!为什么我老是加班?为什么我工资不如他多?原来是我不懂反射!
- DIY人脸跟踪电风扇送女朋友(1)
- VD车辆检测常用方法
- 一维的Haar小波变换
- 微信公众平台“自定义回复”技巧
- 学习excel数据分析_为什么Excel是学习数据分析的最佳方法
- ai人工智能编程_从人工智能动态编程:Q学习
- 机器学习学习吴恩达逻辑回归_机器学习基础:逻辑回归
- fitbit手表中文说明书_如何获取和分析Fitbit睡眠分数