[HNOI2015]菜肴制作 题解(贪心+拓扑)
Description
知名美食家小 A被邀请至ATM 大酒店,为其品评菜肴。
Input
第一行是一个正整数D,表示数据组数。
Output
输出文件仅包含 D 行,每行 N 个整数,表示最优的菜肴制作顺序,或
Sample Input
5 4
5 4
5 3
4 2
3 2
3 3
1 2
2 3
3 1
5 2
5 2
4 3
Sample Output
Impossible!
1 5 2 4 3
拓扑水题
注意小号尽量考前!=字典序最小
显然建反图
我一开始搞了一个小根堆,然后每次取出能拓扑的就dfs拓扑,
但是这样无法保证内部拓扑序最优
于是把所有点扔进去用大根堆直接跑拓扑,
反向输出即可
#include<cstdio>
#include<iostream>
#include<cstring>
#include<queue>
#include<vector>
using namespace std;
priority_queue<int,vector<int>,less<int> >q;
const int N=;
vector<int> ans;
int T,n,m,to[N],nxt[N],head[N],tot=,link[N],vis[N],deg[N],num=;
void ini()
{
for(int i=;i<=n;i++)
to[i]=nxt[i]=head[i]=vis[i]=link[i]=deg[i]=;
tot=num=;ans.clear();
}
void add(int x,int y)
{
to[++tot]=y;
nxt[tot]=head[x];
head[x]=tot;
}
bool topsort()
{
for(int i=;i<=n;i++)
if(!deg[i])q.push(i);
while(!q.empty())
{
int u=q.top();
ans.push_back(u);
q.pop();
for(int i=head[u];i;i=nxt[i])
if(!(--deg[to[i]]))q.push(to[i]);
}
if(ans.size()!=n)return false;
return true;
}
void work()
{
ini();
scanf("%d%d",&n,&m);
for(int i=;i<=m;i++)
{
int x,y;
scanf("%d%d",&x,&y);
add(y,x);deg[x]++;
}
if(!topsort())
{
puts("Impossible!");
return ;
}
for(int i=ans.size()-;i>=;i--)
printf("%d ",ans[i]);
puts(" ");
}
int main()
{
scanf("%d",&T);
while(T--)work();
return ;
}
[HNOI2015]菜肴制作 题解(贪心+拓扑)的更多相关文章
- [HNOI2015]菜肴制作 题解(自带口胡证明)
[HNOI2015]菜肴制作 时间限制: 1 Sec 内存限制: 512 MB 题目描述 知名美食家小 A被邀请至ATM 大酒店,为其品评菜肴. ATM 酒店为小 A 准备了 N 道菜肴,酒店按照为 ...
- [bzoj4010][HNOI2015]菜肴制作_贪心_拓扑排序
菜肴制作 bzoj-4010 HNOI-2015 题目大意:给定一张n个点m条边的有向图,求一个toposort,使得:(1)满足编号为1的点尽量在前:(2)满足(1)的情况下编号为2的点尽量在前,以 ...
- 洛谷 P3243 [HNOI2015]菜肴制作 题解
每日一题 day60 打卡 Analysis 这道题一看就感觉是个拓扑排序,但因为按字典序最小的排序会有问题(见第三个样例)主要原因是每次选择有后效性,而从后往前就不会存在这个问题,因为每个子任务都是 ...
- 【题解】[HNOI2015]菜肴制作(贪心+topo序)
[题解][HNOI2015]菜肴制作(贪心+topo序) 题意:请你构造一个排列\(p[i]\)使得对于数组\(arc[i]=p[i]\)的字典序最小,并且对于给定的有序数对\((u,v)\)保证你给 ...
- BZOJ_4010_[HNOI2015]菜肴制作_拓扑排序+贪心
BZOJ_4010_[HNOI2015]菜肴制作_拓扑排序+贪心 Description 知名美食家小 A被邀请至ATM 大酒店,为其品评菜肴. ATM 酒店为小 A 准备了 N 道菜肴,酒店按照为菜 ...
- BZOJ 4010: [HNOI2015]菜肴制作( 贪心 )
把图反向,然后按拓扑序贪心地从大到小选, 最后输出.set比priority_queue慢... --------------------------------------------------- ...
- 【BZOJ4010】[HNOI2015]菜肴制作 拓扑排序
[BZOJ4010][HNOI2015]菜肴制作 Description 知名美食家小 A被邀请至ATM 大酒店,为其品评菜肴. ATM 酒店为小 A 准备了 N 道菜肴,酒店按照为菜肴预估的质量从高 ...
- [HNOI2015]菜肴制作贪心的证明
[HNOI2015]菜肴制作贪心的证明 先吐槽一句为什么网上都没人证这个东西,我觉得一点也不显然啊... 判环不用说了,现在处理一个DAG.考虑按题意模拟:建反图(边从后选的点连向先选的点),每次找全 ...
- bzoj 4010: [HNOI2015]菜肴制作 拓扑排序
题目链接: 题目 4010: [HNOI2015]菜肴制作 Time Limit: 5 Sec Memory Limit: 512 MB 问题描述 知名美食家小 A被邀请至ATM 大酒店,为其品评菜肴 ...
随机推荐
- 探索Redis设计与实现10:Redis的事件驱动模型与命令执行过程
本文转自互联网 本系列文章将整理到我在GitHub上的<Java面试指南>仓库,更多精彩内容请到我的仓库里查看 https://github.com/h2pl/Java-Tutorial ...
- eclipse run error:g++ not found in Path
网上有人说: 在eclipse下 windows-->Preference-->C/C++-->Build-->Setting然后选择Discovery标签,将里面的内容全部R ...
- Elasticsearch搜索查询语法
- Python做单元测试小实例
import sys#先定义一个函数,这个函数是计算高*宽,并返回计算结果def test(hight,width): return hight*width #这是程序启动函数入口,给要测试的函 ...
- hibernate.Criteria分页排序模糊查询
org.hibernate.Criteria criteria = simpleDAO.getSession().createCriteria(Event.class); Criterion c = ...
- Django框架(十九)—— drf:序列化组件(serializer)
目录 序列化组件 一.利用for循环来实现序列化(繁琐) 二.利用Django提供的序列化组件(不可控需要的字段) 三.利用drf提供的序列化组件 1.基于Serializer类实现序列化--基本语法 ...
- 免费服务器AWS免费使用一年详细教程
AWS免费使用详细教程 福利,亚马逊AWS免费试用一年,简直是爽歪歪.无论是搭建网站,还是自建**,都是不错的选择.详细如下: 开始准备:信用卡一张. 详细视频教程见:http://v.youku.c ...
- mysql 个人博客应用的建表和相关查询
一.建表 用户表tb_user create table if not exists tb_user( user_id int auto_increment, ) not null, user_pas ...
- XSS注入方式和逃避XSS过滤的常用方法(整理)
(转自黑吧安全网http://www.myhack58.com/) web前端开发常见的安全问题就是会遭遇XSS注入,而常见的XSS注入有以下2种方式: 一.html标签注入 这是最常见的一种,主要入 ...
- Win7下VS2008安装cocos2d-2.0-x-2.0.4模板时, 运行InstallWizardForVS2008.js文件执行失败的解决办法
今天在Win7环境下的VS2008中安装cocos2d-x模板的过程中,当点击InstallWizardForVS2008.js时,弹出" 没有文件扩展'.js'的脚本引擎&q ...