[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 道菜肴,酒店按照为菜 ...
随机推荐
- Win8 Metro(C#)数字图像处理--4图像颜色空间描述
原文:Win8 Metro(C#)数字图像处理--4图像颜色空间描述 图像颜色空间是图像颜色集合的数学表示,本小节将针对几种常见颜色空间做个简单介绍. /// <summary> / ...
- Win8Metro(C#)数字图像处理--2.22二值图像膨胀
原文:Win8Metro(C#)数字图像处理--2.22二值图像膨胀 [函数名称] 二值图像膨胀函数DilationProcess(WriteableBitmap src) [算法说明] 膨胀 ...
- SqlServer 可更新订阅升级字段队列数据丢失原因
原文:SqlServer 可更新订阅升级字段队列数据丢失原因 之前简单描述过数据冲突发生的原因:SQLServer可更新订阅数据冲突的一个原因 ,但具体内部原理是怎么丢失的还不清楚,今天补充说明.可更 ...
- Win10的UWP之进度条
原文:Win10的UWP之进度条 关于UWP的进度条的处理的方案有两种方案 我们新建一个项目,然后处理的界面如下的代码 <Grid.RowDefinitions> <RowDefin ...
- 解决com.android.dex.DexException: Multiple dex files define Lcom/google/gson/JsonSerializer;
我在开发Windows Azure的Mobile Service(隔天补上创建过程)的安卓客户端时,报出了com.android.dex.DexException: Multiple dex file ...
- msys2 安装笔记(可以按照这个关键字搜索)
以前一直在用 msys,最近发现还有个 msys2,并且msys2 配套的编译器是MinGW-w64. 就试着用了用,感觉还不错,这里把安装过程记录一下. 简单的说,MSYS2 是MSYS的一个升级版 ...
- Qt Quick 事件处理之信号与槽(foruok的博客)
前面两篇文章<QML 语言基础>和<Qt Quick 简单教程>中我们介绍了 QML 语言的基本语法和 Qt Quick 的常见元素,亲们,通过这两篇文章,您应该已经可以完成简 ...
- Gradle添加外部项目代码
为了测试一些功能,我想在公司的项目中引进外部项目的子模块代码进来调试,试验了好半天终于成功了... 原来不需要导入代码,只要在settings.gradle中这样就好了: 然后就可以和原项目中的代码一 ...
- jqGrid使用经验分享(一)——jqGrid简单使用、json格式和jsonReader介绍
广大的读者朋友们大家好,很高兴又可以在博客中和大家分享我的开发经验了. 此次,我准备向大家介绍一个非常好用的jQuery表格插件——jqGrid. 如果您在实际项目中遇到web端表格展示功能的需求,又 ...
- 深入理解Java的浅克隆与深克隆
前言 克隆,即复制一个对象,该对象的属性与被复制的对象一致,如果不使用Object类中的clone方法实现克隆,可以自己new出一个对象,并对相应的属性进行数据,这样也能实现克隆的目的. 但当对象属性 ...