传送门

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

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

考虑一个数放在什么位置

一开始我想的是,对于一个限制 $(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 ;
}

最新文章

  1. Start_Learning_Python 03 条件、循环
  2. 开发资源列表【Worldsing分享】
  3. web.xml中servlet的配置
  4. AO创建IFeature的两种方法
  5. 【转】iOS-延迟操作方法总结
  6. SQL2005查询所有表的大小
  7. c#中jeson字符串和OBJECT对象的相互转换
  8. 【CSS学习笔记】整齐的表格
  9. laravel中数据库在哪个文件中配置
  10. iOS-UINavigationBar【颜色设置】
  11. Python3.0科学计算学习之绘图(三)
  12. cookie httpOnly 打勾
  13. linq之左连接 + group by
  14. iOS 开开中textfield的一些记录
  15. Spark流处理调优步骤
  16. 3.27PSP及体会
  17. chrome 自动加载flash
  18. 跟我一起学习ASP.NET 4.5 MVC4.0(四)
  19. HTML5 Canvas ( 图形变换矩阵 ) transform, setTransform
  20. 关于RabbitMQ一点

热门文章

  1. InvocationtargetException 类型转换异常
  2. Vue 与Angular、React框架的对比
  3. JS获得css样式即获得元素的计算样式(《Javascript精粹修订版》书摘)
  4. django: rest-framework的 分页和过滤
  5. MFC可视化
  6. C# 把本地文件上传到服务器上,和从服务器上下载文件
  7. datagrid 自定义 pager
  8. scala冒泡排序
  9. CSS3的2D与3D转换
  10. delphi Post数据到网页