BZOJ4010:[HNOI2015]菜肴制作
我对贪心的理解:https://www.cnblogs.com/AKMer/p/9776293.html
题目传送门:https://www.lydsy.com/JudgeOnline/problem.php?id=4010
对于这道题,比较麻烦的是他要求的并不是完全字典序最小的一个序列,而是满足序号从小到大尽量要靠前。所以这就不能直接每次拓扑排序直接取最小值了,也许较大值取出来后就可以取更小的值了呢。
比如\(2\)号菜必须在\(5\)号菜后面处理,\(3\)号菜必须在\(4\)号菜后面处理。那么直接按字典序最小就是\(1,4,3,5,2\)了,而题意要求的却是\(1,5,2,4,3\)。
既然这个东西这么麻烦使我们无法很快的判断出哪个值应该放在前面,那么我们就不去想哪个值放在前面了嘛。我们就去想,较大的值是不是应该放在更后面。
结果发现还真是这样,那么我们就直接倒着做,每次取可取值里最大的值放在后面就行了,拓扑排序加堆优化就\(Over\)了。
时间复杂度:\(O(nlogn)\)
空间复杂度:\(O(n)\)
代码如下:
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
const int maxn=1e5+5;
int n,m,tot,cnt,x,y;
int deg[maxn],ans[maxn];
int now[maxn],pre[maxn],son[maxn];
int read() {
int x=0,f=1;char ch=getchar();
for(;ch<'0'||ch>'9';ch=getchar())if(ch=='-')f=-1;
for(;ch>='0'&&ch<='9';ch=getchar())x=x*10+ch-'0';
return x*f;
}
void clear() {
cnt=tot=0;
memset(now,0,sizeof(now));
memset(deg,0,sizeof(deg));
}
void add(int a,int b) {
pre[++tot]=now[a];
now[a]=tot;son[tot]=b;
deg[b]++;
}
struct Heap {
int tot;
int node[maxn];
void ins(int x) {
node[++tot]=x;
int pos=tot;
while(pos>1) {
if(node[pos]>node[pos>>1])
swap(node[pos],node[pos>>1]),pos>>=1;
else break;
}
}
int pop() {
int res=node[1];
node[1]=node[tot--];
int pos=1,son=2;
while(son<=tot) {
if(son<tot&&node[son|1]>node[son])son|=1;
if(node[son]>node[pos])
swap(node[son],node[pos]),pos=son,son=pos<<1;
else break;
}
return res;
}
}T;
void work() {
for(int i=1;i<=n;i++)
if(!deg[i])T.ins(i);
while(T.tot) {
int u=T.pop();
for(int p=now[u],v=son[p];p;p=pre[p],v=son[p])
if(!(--deg[v]))T.ins(v);
ans[++cnt]=u;
}
}//拓扑排序加大根堆优化
void print_ans() {
for(int i=n;i>1;i--)
printf("%d ",ans[i]);
printf("%d\n",ans[1]);//输出也要倒着
}
int main() {
int T=read();
while(T--) {
n=read(),m=read();clear();
for(int i=1;i<=m;i++)
x=read(),y=read(),add(y,x);//y要比x后制作,所以y向x连边
work();
if(cnt!=n)puts("Impossible!");//cnt不等于n说明有环,就GG了
else print_ans();
}
return 0;
}
BZOJ4010:[HNOI2015]菜肴制作的更多相关文章
- [bzoj4010][HNOI2015]菜肴制作_贪心_拓扑排序
菜肴制作 bzoj-4010 HNOI-2015 题目大意:给定一张n个点m条边的有向图,求一个toposort,使得:(1)满足编号为1的点尽量在前:(2)满足(1)的情况下编号为2的点尽量在前,以 ...
- BZOJ4010: [HNOI2015]菜肴制作
Description 知名美食家小 A被邀请至ATM 大酒店,为其品评菜肴. ATM 酒店为小 A 准备了 N 道菜肴,酒店按照为菜肴预估的质量从高到低给予 1到N的顺序编号,预估质量最高的菜肴编号 ...
- BZOJ4010[HNOI2015]菜肴制作——拓扑排序+堆
题目描述 知名美食家小 A被邀请至ATM 大酒店,为其品评菜肴. ATM 酒店为小 A 准备了 N 道菜肴,酒店按照为菜肴预估的质量从高到低给予 1到N的顺序编号,预估质量最高的菜肴编号为1.由于菜肴 ...
- BZOJ4010 [HNOI2015]菜肴制作 【拓扑排序 + 贪心】
题目 知名美食家小 A被邀请至ATM 大酒店,为其品评菜肴. ATM 酒店为小 A 准备了 N 道菜肴,酒店按照为菜肴预估的质量从高到低给予 1到N的顺序编号,预估质量最高的菜肴编号为1.由于菜肴之间 ...
- [BZOJ4010]:[HNOI2015]菜肴制作(拓扑排序)
题目传送门 题目描述 知名美食家小A被邀请至ATM大酒店,为其品评菜肴. ATM酒店为小A准备了N道菜肴,酒店按照为菜肴预估的质量从高到低给予1到N的顺序编号,预估质量最高的菜肴编号为1.由于菜肴之间 ...
- bzoj4010: [HNOI2015]菜肴制作【拓扑排序】
想到了一个分治方法,每一次尽量放小的那个,把它依赖的放在左边,不依赖的放在右边. TLE 80: #include <bits/stdc++.h> #define rep(i, a, b) ...
- bzoj4010: [HNOI2015]菜肴制作(拓扑排序+贪心+堆)
这题不是求最小字典序...撕烤了半个小时才发现不对劲T T 这题是能让小的尽量前就尽量前,无论字典序...比如1能在2前面就一定要在2前面... 显然是要先拓扑排序,让小的尽量前转化成让大的尽量往后丢 ...
- BZOJ4010: [HNOI2015]菜肴制作(拓扑排序 贪心)
题意 题目链接 Sol 震惊,HNOI竟出NOI原题 直接在反图上贪心一下. // luogu-judger-enable-o2 // luogu-judger-enable-o2 #include& ...
- 【BZOJ4010】[HNOI2015]菜肴制作 拓扑排序
[BZOJ4010][HNOI2015]菜肴制作 Description 知名美食家小 A被邀请至ATM 大酒店,为其品评菜肴. ATM 酒店为小 A 准备了 N 道菜肴,酒店按照为菜肴预估的质量从高 ...
- bzoj 4010: [HNOI2015]菜肴制作 拓扑排序
题目链接: 题目 4010: [HNOI2015]菜肴制作 Time Limit: 5 Sec Memory Limit: 512 MB 问题描述 知名美食家小 A被邀请至ATM 大酒店,为其品评菜肴 ...
随机推荐
- jedisLock—redis分布式锁实现(转)
一.使用分布式锁要满足的几个条件: 系统是一个分布式系统(关键是分布式,单机的可以使用ReentrantLock或者synchronized代码块来实现) 共享资源(各个系统访问同一个资源,资源的载体 ...
- 鼠标画矩形openCV
#include <cv.h> #include <highgui.h> #include <stdio.h> /*鼠标画矩形*/ void my_mouse_ca ...
- 九度OJ 1261:寻找峰值点 (基础题)
时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:500 解决:37 题目描述: 给定一个整数序列,该整数序列存在着这几种可能:先递增后递减.先递减后递增.全递减.全递增. 请找出那个最大值的 ...
- Django 之 缓存机制
Django 缓存机制 缓存介绍 在动态网站中,用户所有的请求,服务器都会去数据库中进行相应的增,删,查,改,渲染模板,执行业务逻辑,最后生成用户看到的页面. 当一个网站的用户访问量很大的时候,每一次 ...
- Linux安装virtualenvwrapper详细步骤
1.[root@localhost ~]# pip install virtualenvwrapper 2.[root@localhost ~]# pip list [root@localhost ~ ...
- python cookbook第三版学习笔记十五:property和描述
8.5 私有属性: 在python中,如果想将私有数据封装到类的实例上,有两种方法:1 单下划线.2 双下划线 1 单下划线一般认为是内部实现,但是如果想从外部访问的话也是可以的 2 双下划线是则无法 ...
- abap Excel 导入
ABAP 将EXECL数据导入SAP内表的几个步骤. 本文转自:http://blog.csdn.net/szlaptop/article/details/8663451 http://www.c ...
- spring 3.2 后 annotation-driven 注册新的类
DefaultAnnotationHandlerMapping 和 AnnotationMethodHandlerAdapter 的使用已经过时! DefaultAnnotationHandlerMa ...
- ceph基本架构简述
1. 介绍 云硬盘是IaaS云平台的重要组成部分,云硬盘给虚拟机提供了持久的块存储设备.目前的AWS 的EBS(Elastic Block store)给Amazon的EC2实例提供了高可用高可靠的块 ...
- J2EE SSH框架整合教程
本文仅作为学习和研究的参考,与实际项目使用技术有所不同,由于作者水平有限,错误疏漏在所难免,请各位看官批评指教. 项目的源代码放在:https://github.com/Frank-Pei/SSHIn ...