洛谷P3243 [HNOI2015]菜肴制作(思维+反向拓扑)
传送门
听说原本是紫题
需要先做 i i i 再做 j j j 的限制很自然的让人想到了拓扑排序,然而让编号较小的菜肴尽可能较早输出并不是要求得到最小字典序的答案!! 反面样例可见第三组输入数据,若按最小字典序为 14352 14352 14352 ,使得 2 2 2 号菜肴更迟了。
容易判断当存在环时无解,可以通过跑程序的过程中记录访问过的点的数目,若点数不为 n n n ,则说明存在无法被加入的点。
既然正向不行,那么可以考虑通过反向拓扑进行操作,以最后才能够被操作的作为起始点,原先在正向需要选出最小的,那么反向就是不断找出最大的,可以采用优先队列实现这一点,最后进行逆向输出即可。
#include <bits/stdc++.h>
#define int long long
using namespace std;const int N=1e5+10;
vector <int> h[N];
vector <int> ans;
int in[N];void solve(){int n,m,x,y;cin>>n>>m;for(int i=1;i<=n;i++){h[i].clear();in[i]=0;}ans.clear();priority_queue <int> q;for(int i=1;i<=m;i++){cin>>x>>y;h[y].push_back(x);//反向边in[x]++;}for(int i=1;i<=n;i++)if(in[i]==0)q.push(i);//入度为0 入队 int sum=0;//被访问的结点总数 while(!q.empty()){int temp=q.top();//此时取出的是最后入队的元素 q.pop();ans.push_back(temp);sort(h[temp].begin(),h[temp].end());//不了解为什么此处是否排序都是对的(坐等dalao for(auto a:h[temp]){in[a]--;if(in[a]==0)q.push(a);}}if(ans.size()<n-1){cout<<"Impossible!"<<endl;return;}for(int i=ans.size()-1;i>=0;i--){cout<<ans[i]<<" ";}cout<<endl;
}signed main(){int t;cin>>t;while(t--)solve();return 0;
}
洛谷P3243 [HNOI2015]菜肴制作(思维+反向拓扑)相关推荐
- 洛谷P3243 [HNOI2015]菜肴制作——拓扑排序
题目:https://www.luogu.org/problemnew/show/P3243 正向按字典序拓扑排序很容易发现是不对的,因为并不是序号小的一定先做: 但若让序号大的尽可能放在后面,则不会 ...
- 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]菜肴制作(拓扑排序、贪心)
解析 很好的题 也就是我没做出来的意思 反向思维似乎是我欠缺的 这道题也是 也许做题时应该多特意往这边想想 当正向看并没有太好的性质时,也许反过来能使题目豁然开朗 容易想到暴力n方如何做 (以下均指反 ...
- P3243 [HNOI2015]菜肴制作
传送门 把时间看成数,菜肴看成位置 考虑一个位置填什么数很麻烦 考虑一个数放在什么位置 一开始我想的是,对于一个限制 $(a,b)$ ,从 $a$ 往 $b$ 连一条边,然后如果有解则所有的限制构成了 ...
- 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] ...
最新文章
- day 2 基本类型和函数
- 显示一个顶层的提示信息
- linux学习之路——ubuntu 16.04 开机开启数字小键盘解决方法
- 【机器学习入门到精通系列】无监督学习之K-means
- hdu3714 水三分
- 2019年全栈工程师技术指南和趋势!
- wxWidgets:文档/视图框架
- 鸿蒙系统能否推广,鸿蒙系统凭实力占市场,无需通过禁止安卓系统来推广
- C/C++ ltoa函数 - C语言零基础入门教程
- java上机实验答案_java上机实验答案与解析
- 数据库连接池之_c3p0
- Python 39 数据库的数据类型
- mysql 输入密码后闪退_iPhone抹除还原后需要输入账号密码怎么办?
- valgrind检测内存泄露
- linux操作系统的中断处理,Linux操作系统内核编程中断处理程序解读
- android 点击屏幕 回调,Android 点击回调传递
- 新手必备的15款渲染器,超级干货不要错过
- js实现数字转化为大写金额——js技能提升
- 【软件资源】VS2013软件安装全教程!(附VS各版本下载地址)
- 重看joel on software