这道题看起来就是个裸的拓扑排序,抄上模板就能AC。

上面这种想法一看就不现实,然鹅我第一次还真就这么写了,然后被随意hack。


我们需要注意一句话:

现在,酒店希望能求出一个最优的菜肴的制作顺序,使得小 A能尽量先吃到质量高的菜肴:

这句话什么意思呢?

看上去它是说想要一个字典序最小的排列,但我们可以发现,题目并不是强求质量高一定先,而是有一个宽限范围(可能我讲的比较玄学)。

解决方案是贪心地把大的放在末尾,那么最后一定是最优解。

所以我们跑一个字典序最大的拓扑就可以了。

字典序最大就是反着跑一遍字典序最小。


AC代码如下:

820ms 133668kb

 #include<bits/stdc++.h>

 using namespace std;

 namespace StandardIO {

     template<typename T>inline void read (T &x) {
x=;T f=;char c=getchar();
for (; c<''||c>''; c=getchar()) if (c=='-') f=-;
for (; c>=''&&c<=''; c=getchar()) x=x*+c-'';
x*=f;
} template<typename T>inline void write (T x) {
if (x<) putchar('-'),x*=-;
if (x>=) write(x/);
putchar(x%+'');
} } using namespace StandardIO; namespace Solve { const int N=; int T,n,m,cnt;
int indeg[N],ans[N];
vector<int>graph[N]; inline void toposort () {
int temp[N];
priority_queue<int>q;
memcpy(temp,indeg,sizeof(indeg));
while(!q.empty())q.pop();
for (register int i=; i<=n; ++i) {
if (temp[i]==) q.push(i);
}
while (!q.empty()) {
int v=q.top();q.pop();
ans[++cnt]=v;
for (register int i=; i<graph[v].size(); ++i) {
int to=graph[v][i];
temp[to]--;
if (temp[to]==) q.push(to);
}
}
} inline void solve () {
read(T);
while (T--) {
read(n),read(m);
cnt=,memset(indeg,,sizeof(indeg));
for (register int i=; i<=n; ++i) {
graph[i].clear();
}
for (register int i=; i<=m; ++i) {
int x,y;
read(x),read(y);
indeg[x]++;
graph[y].push_back(x);
}
toposort();
if (cnt!=n) puts("Impossible!");
else {
for (register int i=n; i>=; --i) write(ans[i]),putchar(' ');
putchar('\n');
}
} }
} using namespace Solve; int main () {
// freopen(".in","r",stdin);
// freopen(".out","w",stdout);
solve();
}

最新文章

  1. Unity插件使用总结
  2. 分享一下SQLSERVER技术交流QQ群里的群共享资源
  3. HDU 4287 Intelligent IME(string,map,stl,make_pair)
  4. xshell 上传 下载文件
  5. 学习redis-安装和基本一些命令
  6. ZOJ 3490 String Successor
  7. EC读书笔记系列之18:条款47、48
  8. scala 函数编程
  9. Linux下利用expect,不用交互模式,直接登陆远程主机
  10. NV12格式转RGB的CUDA实现
  11. CodeForces-747E
  12. 列表(list) ----python
  13. simple高度自定义的jqPaginator 项目中做分页的应用技巧
  14. [Offer收割] 编程练习赛63
  15. Embedded training,嵌入式训练
  16. Win7局域网内共享文件设置方式
  17. eclipse配置maven后无法下载jar
  18. 2018.10.30 bzoj4942: [Noi2017]整数(线段树压位)
  19. 从客户端(ctl00$ContentPlaceHolder1$result=&quot;&lt;?xml version=&quot;1.0&quot; ...&quot;)中检测到有潜在危险的 Request.Form 值。
  20. ubuntu12.04安装nox-classic

热门文章

  1. HTML基础——网站友情链接显示页面
  2. 贰、js的基础(二)类型转换
  3. 手把手教你如何新建scrapy爬虫框架的第一个项目(下)
  4. java 实现多线程 3种方式
  5. luogu P3795 钟氏映射(递推)
  6. Atitit.html解析器的选型&amp;#160;jsoup&amp;#160;nsoup&amp;#160;,java&amp;#160;c#&amp;#160;.net&amp;#160;版本号
  7. Why functions - Not only for python
  8. 3.Linux系统信息
  9. luogu 3393 逃离僵尸岛
  10. 设置和获取Android中各种音量