传送门

把时间看成数,菜肴看成位置

考虑一个位置填什么数很麻烦

考虑一个数放在什么位置

一开始我想的是,对于一个限制 $(a,b)$ ,从 $a$ 往 $b$ 连一条边,然后如果有解则所有的限制构成了一个 $DAG$

考虑当前最小的数给谁,显然是当前没有入度的且编号最小的点

所以可以直接按拓扑序把数一个个 '给' 过去,并用升序的优先队列维护当前没有入度的位置最小的点

然后就 $GG$ 了

随手一个数据就可以 $hack$ 掉 :

$4\ 2$

$1\ 3$

$4\ 2$

正确答案:1 3 4 2,错误输出:1 4 2 3

考虑一下为什么会 $GG$

一开始 $1,4$ 没有入度,队列中: $1,4$

把 $1$ 取出来,然后 $3$ 也没有入度,队列中 $3,4$

把 $3$ 取出来,队列中 $4$

把 $4$ 取出来,$2$ 没有入度,队列中 $2$

把 $2$ 取出来,结束

分析一下问题出在哪,$4$,指向一个小于 $3$ 的节点$2$,如果先把 $4$ 取走,那么 $2$ 的编号就会比较小

就是说,一开始数 $a$ 给了位置 $p$,然后 $a+1$ 给位置 $pr,(pr>p)$,然后因为 $pr$ 有一条边连给 $pl,(pl<p)$,所以 $a+2$ 给 $pl$,导致 $GG$

考虑反过来,把 $DAG$ 反过来,最大值先 '给' 位置最大的数,用降序优先队列维护当前没有入度的位置最大的点

这样就可以避免出现这种情况

然后就可以了

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<cmath>
#include<vector>
#include<queue>
using namespace std;
typedef long long ll;
inline int read()
{
int x=,f=; char ch=getchar();
while(ch<''||ch>'') { if(ch=='-') f=-; ch=getchar(); }
while(ch>=''&&ch<='') { x=(x<<)+(x<<)+(ch^); ch=getchar(); }
return x*f;
}
const int N=1e5+;
int n,m,cnt[N],pos[N],ans[N],now;
vector <int> v[N];
priority_queue <int> q;
int main()
{
int T=read();
while(T--)
{
n=read(),m=read();
for(int i=;i<=n;i++) cnt[i]=pos[i]=ans[i]=,v[i].clear();
int a,b;
for(int i=;i<=m;i++)
{
a=read(),b=read();
v[b].push_back(a); cnt[a]++;
}
for(int i=;i<=n;i++) if(!cnt[i]) q.push(i);
now=n;
while(!q.empty())
{
int x=q.top(); pos[x]=now--; q.pop();
for(int i=v[x].size()-;i>=;i--)
{
cnt[v[x][i]]--;
if(!cnt[v[x][i]]) q.push(v[x][i]);
}
}
bool flag=;
for(int i=;i<=n;i++) if(!pos[i]) { printf("Impossible!\n"); flag=; break; }
if(!flag) continue;
for(int i=;i<=n;i++) ans[pos[i]]=i;
for(int i=;i<=n;i++) printf("%d ",ans[i]); printf("\n");
}
return ;
}

P3243 [HNOI2015]菜肴制作的更多相关文章

  1. P3243 [HNOI2015]菜肴制作(拓扑排序)

    P3243 [HNOI2015]菜肴制作 题目误导你正着做拓扑排序,然鹅你可以手造数据推翻它.于是就只能倒着做 我们开个优先队列,每次把可填的最大的编号取出来搞,最后倒着输出拓扑序就好辣 #inclu ...

  2. 洛谷P3243 [HNOI2015]菜肴制作——拓扑排序

    题目:https://www.luogu.org/problemnew/show/P3243 正向按字典序拓扑排序很容易发现是不对的,因为并不是序号小的一定先做: 但若让序号大的尽可能放在后面,则不会 ...

  3. luogu P3243 [HNOI2015]菜肴制作

    这题一看就知道和拓扑序有关 考虑拓扑排序的时候每次取队列里最小的数进行排序 然后就\(\mathcal{GG}\)了,因为这样只能使字典序最小,而并不能保证题目中要求的每个编号的数要在满足前面数尽量在 ...

  4. 洛谷P3243 [HNOI2015]菜肴制作 拓扑排序+贪心

    正解:拓扑排序 解题报告: 传送门! 首先看到它这个约束就应该要想到拓扑排序辣QwQ 首先想到的应该是用优先队列代替队列,按照节点编号排序 然后也很容易被hack:<5,1> 正解应为5, ...

  5. Making Dishes (P3243 [HNOI2015]菜肴制作)

    Background\text{Background}Background I've got that Luogu Dialy has been \text{I've got that Luogu D ...

  6. 洛谷 P3243 [HNOI2015]菜肴制作 题解

    每日一题 day60 打卡 Analysis 这道题一看就感觉是个拓扑排序,但因为按字典序最小的排序会有问题(见第三个样例)主要原因是每次选择有后效性,而从后往前就不会存在这个问题,因为每个子任务都是 ...

  7. 洛谷P3243 [HNOI2015]菜肴制作 (拓扑排序/贪心)

    这道题的贪心思路可真是很难证明啊...... 对于<i,j>的限制(i必须在j之前),容易想到topsort,每次在入度为0的点中选取最小的.但这种正向找是错误的,题目要求的是小的节点尽量 ...

  8. bzoj 4010: [HNOI2015]菜肴制作 拓扑排序

    题目链接: 题目 4010: [HNOI2015]菜肴制作 Time Limit: 5 Sec Memory Limit: 512 MB 问题描述 知名美食家小 A被邀请至ATM 大酒店,为其品评菜肴 ...

  9. BZOJ 4010: [HNOI2015]菜肴制作( 贪心 )

    把图反向,然后按拓扑序贪心地从大到小选, 最后输出.set比priority_queue慢... --------------------------------------------------- ...

随机推荐

  1. SpringAOP01 利用AOP实现权限验证、利用权限验证服务实现权限验证

    1 编程范式 1.1 面向过程 1.2 面向对象 1.3 面向切面编程 1.4 函数式编程 1.5 事件驱动编程 2 什么是面向切面编程 2.1 是一种编程范式,而不是一种编程语言 2.2 解决一些特 ...

  2. JSSDK用法

    参照微信官方文档,调试成功之后总结如下: 步骤一:绑定域名 先登录微信公众平台进入“公众号设置”的“功能设置”里填写“JS接口安全域名”. 备注:登录后可在“开发者中心”查看对应的接口权限. 步骤二: ...

  3. xgboost 调参 !

    https://jessesw.com/XG-Boost/ http://blog.csdn.net/u010414589/article/details/51153310

  4. Installing R under Unix-alikes

    Linux上R的安装 可参考https://cran.r-project.org/doc/manuals/r-release/R-admin.html#Installing-R-under-Unix_ ...

  5. TP5多入口设置

    今天在用tp5做项目的时候发现,前台是可以绑定默认到index模块的,但是后台不好弄,于是查了一下手册,按照手册上说的,复制了index.php改为admin.php,作为后台的入口文件,于是域名/a ...

  6. 三解炸弹人——DFS

    原创 枚举解炸弹人—— https://www.cnblogs.com/chiweiming/p/9295262.html BFS解炸弹人—— https://www.cnblogs.com/chiw ...

  7. stuff for xml path

    SumOrg=stuff((select '/'+User_Org from V_RubricInfoRefer t where t.RubricID=V_RubricInfoRefer.Rubric ...

  8. Arduino ADC + 模拟温度传感器LM35D

    LM35是美国国家半导体(后被TI收购)推出的精密温度传感IC系列,其信号输出方式为模拟输出,输出电压值与摄氏温度值呈正比,且用户不需额外的校正就能获得较高的测量精度.其主要特性有: 供电电压:4~3 ...

  9. ComicEnhancerPro 系列教程十七:二值化图像去毛刺

    作者:马健邮箱:stronghorse_mj@hotmail.com 主页:http://www.comicer.com/stronghorse/ 发布:2017.07.23 教程十七:二值化图像去毛 ...

  10. hbase安装 配置报错 zookeeper启动报错

    zookeeper安装问题,使用独立安装的zookeeper export HBASE_MANAGES_ZK=false   #如果使用独立安装的zookeeper这个地方就是false 创建zook ...