题解 P3243 【[HNOI2015]菜肴制作】
2024-08-31 15:18:35
这道题看起来就是个裸的拓扑排序,抄上模板就能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();
}
最新文章
- Unity插件使用总结
- 分享一下SQLSERVER技术交流QQ群里的群共享资源
- HDU 4287 Intelligent IME(string,map,stl,make_pair)
- xshell 上传 下载文件
- 学习redis-安装和基本一些命令
- ZOJ 3490 String Successor
- EC读书笔记系列之18:条款47、48
- scala 函数编程
- Linux下利用expect,不用交互模式,直接登陆远程主机
- NV12格式转RGB的CUDA实现
- CodeForces-747E
- 列表(list) ----python
- simple高度自定义的jqPaginator 项目中做分页的应用技巧
- [Offer收割] 编程练习赛63
- Embedded training,嵌入式训练
- Win7局域网内共享文件设置方式
- eclipse配置maven后无法下载jar
- 2018.10.30 bzoj4942: [Noi2017]整数(线段树压位)
- 从客户端(ctl00$ContentPlaceHolder1$result=";<;?xml version=";1.0"; ...";)中检测到有潜在危险的 Request.Form 值。
- ubuntu12.04安装nox-classic
热门文章
- HTML基础——网站友情链接显示页面
- 贰、js的基础(二)类型转换
- 手把手教你如何新建scrapy爬虫框架的第一个项目(下)
- java 实现多线程 3种方式
- luogu P3795 钟氏映射(递推)
- Atitit.html解析器的选型&;#160;jsoup&;#160;nsoup&;#160;,java&;#160;c#&;#160;.net&;#160;版本号
- Why functions - Not only for python
- 3.Linux系统信息
- luogu 3393 逃离僵尸岛
- 设置和获取Android中各种音量