Luogu P3243 [HNOI2015]菜肴制作
题目
题目要求的顺序很像是字典序最小,不过并不是,所以不能够直接跑最小拓扑序。
不过我们可以发现这个顺序实际上就是反向图上最大拓扑序的reverse。
对于限制,我们建这样一条边。
然后开个堆跑最大拓扑序。
判断一下是否无解,然后反向输出即可。
#include<bits/stdc++.h>
#define pb push_back
using namespace std;
const int N=100007;
vector<int>E[N];
int vis[N],deg[N],a[N];
priority_queue<int>q;
int read(){int x;scanf("%d",&x);return x;}
int main()
{
int T,n,m,u,v,i,cnt=0,tot;
for(T=read();T;--T)
{
n=read(),m=read(),memset(deg,0,sizeof deg),memset(vis,0,sizeof vis),cnt=tot=0;
for(i=1;i<=n;++i) E[i].clear();
for(i=1;i<=m;++i) v=read(),u=read(),E[u].pb(v),++deg[v];
for(i=1;i<=n;++i) if(!deg[i]) q.push(i),vis[i]=1,++cnt;
while(!q.empty())
{
u=q.top(),q.pop(),a[++tot]=u;
for(int v:E[u])
{
--deg[v];
if(!deg[v]&&!vis[v]) q.push(v),vis[v]=1,++cnt;
}
}
if(cnt^n) {puts("Impossible!");continue;}
for(i=n;i;--i) printf("%d ",a[i]);
puts("");
}
}
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· C++代码改造为UTF-8编码问题的总结
· DeepSeek 解答了困扰我五年的技术问题
· 为什么说在企业级应用开发中,后端往往是效率杀手?
· 用 C# 插值字符串处理器写一个 sscanf
· Java 中堆内存和栈内存上的数据分布和特点
· 为DeepSeek添加本地知识库
· .NET程序员AI开发基座:Microsoft.Extensions.AI
· 精选4款基于.NET开源、功能强大的通讯调试工具
· 数据不出内网:基于Ollama+OneAPI构建企业专属DeepSeek智能中台
· 大模型工具KTransformer的安装