[HNOI2015]菜肴制作 题解(自带口胡证明)
[HNOI2015]菜肴制作
时间限制: 1 Sec 内存限制: 512 MB
题目描述
知名美食家小 A被邀请至ATM 大酒店,为其品评菜肴。
输入
第一行是一个正整数D,表示数据组数。
输出
输出文件仅包含 D 行,每行 N 个整数,表示最优的菜肴制作顺序,或
样例输入
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
提示
【样例解释】
1
6 6
6 5
6 4
4 3
3 1
2 1
5 2
正解是6 5 2 4 3 1,如果我没猜错你的答案是6 4 3 5 2 1,但是2是能靠前就靠前的,因此这种做法是错误的。 常规做法有一个很大的弊端,就是他忽略了他向下找入度为0的点的途中所遇到的点,这就很尴尬了,那我们应该怎么搞呢?
正解是倒着搞一遍,把边和入度全部打过来,贪心找最大的,最后答案也要倒着输出,不难发现这样一下子就A了,然而具体原因我和Q某犇在一起捣鼓了半天才貌似给出了证明,如有不对请指正。
首先,我们之所以不去正着贪心是因为这样会忽略一个比当前点更小的点得存在,也就不得不将它本来应当存在的位置靠后,而倒着找就会忽略比当前点都大的点的位置,然而如果我们直接去找最大的位置的话那么必须经过的那个更小的点的实际访问顺序就会越靠后,然而实际并不是这样,越小的是越尽量靠前的,因此如果这样做反而是错的了,但对于正着搜就不然,然而我们貌似不好或者无法实现……
#include<iostream>
#include<cstdlib>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<map>
#include<queue>
#include<string>
#include<cmath>
using namespace std;
int t,n,m,zz,zz2,rd[];
int a[],b[],jg[];
struct ro{
int to;
int next;
}road[],road2[];
void build(int x,int y){
zz++;
road[zz].to=y;
road[zz].next=a[x];
a[x]=zz;
}
priority_queue<int> q1;
int main(){
scanf("%d",&t);
while(t--)
{
memset(rd,,sizeof(rd));
memset(a,,sizeof(a));
zz=;
zz2=;
memset(b,,sizeof(b));
scanf("%d%d",&n,&m);
for(int i=;i<=m;i++)
{
int x,y;
scanf("%d%d",&x,&y);
build(y,x);
rd[x]++;
}
for(int i=;i<=n;i++)
{
if(!rd[i])
q1.push(i);
}
while(!q1.empty())
{
int x=q1.top();
q1.pop();
zz2++;
jg[zz2]=x;
for(int i=a[x];i>;i=road[i].next)
{
int y=road[i].to;
rd[y]--;
if(!rd[y])
q1.push(y);
}
}
if(zz2==n)
{
for(int i=zz2;i>;i--)
printf("%d ",jg[i]);
printf("\n");
}
else
{
printf("Impossible!\n");
}
}
//while(1);
return ;
}
附上同时和我一起做这道题的Q某犇的题解(貌似他的证明和我不太一样)传送门->http://blog.csdn.net/qty2001/article/details/77103300
[HNOI2015]菜肴制作 题解(自带口胡证明)的更多相关文章
- [HNOI2015]菜肴制作 题解(贪心+拓扑)
Description 知名美食家小 A被邀请至ATM 大酒店,为其品评菜肴. ATM 酒店为小 A 准备了 N 道菜肴,酒店按照为菜肴预估的质量从高到低给予 1到N的顺序编号,预估质量最高的菜肴编号 ...
- 洛谷 P3243 [HNOI2015]菜肴制作 题解
每日一题 day60 打卡 Analysis 这道题一看就感觉是个拓扑排序,但因为按字典序最小的排序会有问题(见第三个样例)主要原因是每次选择有后效性,而从后往前就不会存在这个问题,因为每个子任务都是 ...
- 【题解】[HNOI2015]菜肴制作(贪心+topo序)
[题解][HNOI2015]菜肴制作(贪心+topo序) 题意:请你构造一个排列\(p[i]\)使得对于数组\(arc[i]=p[i]\)的字典序最小,并且对于给定的有序数对\((u,v)\)保证你给 ...
- bzoj 4010: [HNOI2015]菜肴制作 拓扑排序
题目链接: 题目 4010: [HNOI2015]菜肴制作 Time Limit: 5 Sec Memory Limit: 512 MB 问题描述 知名美食家小 A被邀请至ATM 大酒店,为其品评菜肴 ...
- 【BZOJ4010】[HNOI2015]菜肴制作 拓扑排序
[BZOJ4010][HNOI2015]菜肴制作 Description 知名美食家小 A被邀请至ATM 大酒店,为其品评菜肴. ATM 酒店为小 A 准备了 N 道菜肴,酒店按照为菜肴预估的质量从高 ...
- BZOJ 4010: [HNOI2015]菜肴制作( 贪心 )
把图反向,然后按拓扑序贪心地从大到小选, 最后输出.set比priority_queue慢... --------------------------------------------------- ...
- P3243 [HNOI2015]菜肴制作(拓扑排序)
P3243 [HNOI2015]菜肴制作 题目误导你正着做拓扑排序,然鹅你可以手造数据推翻它.于是就只能倒着做 我们开个优先队列,每次把可填的最大的编号取出来搞,最后倒着输出拓扑序就好辣 #inclu ...
- bzoj 4010 [HNOI2015]菜肴制作——贪心
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=4010 和 bzoj 2535 差不多.因为当前怎么决策与该点后面连的点的标号情况有关,所以按 ...
- BZOJ_4010_[HNOI2015]菜肴制作_拓扑排序+贪心
BZOJ_4010_[HNOI2015]菜肴制作_拓扑排序+贪心 Description 知名美食家小 A被邀请至ATM 大酒店,为其品评菜肴. ATM 酒店为小 A 准备了 N 道菜肴,酒店按照为菜 ...
随机推荐
- 队列读取器代理 遇到错误 Row handle is invalid
原文:队列读取器代理 遇到错误 Row handle is invalid 今天测试在发布中更改表名称,在发布数据库更改后重新发布这个表. 但是原来的表在订阅没有删除,不小心插入数据到原表中,队列读取 ...
- GIS基础软件及操作(十)
原文 GIS基础软件及操作(十) 练习十.网络分析 (1) 加深对网络分析基本原理.方法的认识:(2) 熟练掌握ARCGIS下进行道路网络分析的技术方法:(3) 结合实际.掌握利用网络分析方法解决地学 ...
- GIS基础软件及操作(八)
原文 GIS基础软件及操作(八) 练习八.地理建模 地理建模:Model Builder 土壤侵蚀危险性建模分析 认识ModelBuilder操作界面 1: 添加硬盘上的数据或工具到模型中,数据也可以 ...
- 如何设计出和 ASP.NET Core 中 Middleware 一样的 API 方法?
由于笔者时间有限,无法写更多的说明文本,且主要是自己用来记录学习点滴,请谅解,下面直接贴代码了(代码中有一些说明): 01-不好的设计 代码: using System; namespace Desi ...
- 瑞芯微RK3399宣布系统开源,进入百余种行业市场!
集微网消息,2月24日瑞芯微官方突然宣布, Rockchip RK3399Linux系统开源!作为Rockchip旗舰级芯片,RK3399具有高性能.高扩展.全能型应用特性. 这一重磅消息立马刷爆朋友 ...
- CentOS7下group和group-、passwd与passwd-之间的区别
今天查看/etc/group时,意外发现另外一个/etc/group-,查看了一下2个文件,发现大部分内容是一致的.这就有点搞不懂了,后面这个group是有啥用呢呢?diff对比了一下,相比group ...
- asp.net mvc+jquery easyui开发实战教程之网站后台管理系统开发2-Model层建立
上篇(asp.net mvc+jquery easyui开发实战教程之网站后台管理系统开发1-准备工作)文章讲解了开发过程中的准备工作,主要创建了项目数据库及项目,本文主要讲解项目M层的实现,M层这里 ...
- 测试链接服务器sql 语句
sp_addlinkedsrvlogin 创建或更新本地 Microsoft® SQL Server™ 实例上的登录与链接服务器上远程登录之间的映射. 语法 sp_addlinkedsrvlogin ...
- aspose授权亲测可用配套代码
支持excel,word,ppt,pdf using Aspose.Cells; using Aspose.Words.Saving; using ESBasic; using OMCS.Engine ...
- Javascript中escape(), encodeURI()和encodeURIComponent()之精析与比较
escape(), encodeURI()和encodeURIComponent()是在Javascript中用于编码字符串的三个常用的方法,而他们之间的异同却困扰了很多的Javascript初学者, ...