Luogu P3243 菜肴制作
2024-08-27 05:50:21
Luogu P3243 菜肴制作
神神奇奇的拓扑排序,也就是借这道题学习一下大名鼎鼎的Toposort了……
#include<bits/stdc++.h>
#define N 100010
using namespace std;
int d,n,m,cnt,tot;
int in[N],ans[N],head[N];
struct node {
int nxt,to;
}edge[N];
void addEdge(int u,int v) {
edge[++tot]=(node){head[u],v};
head[u]=tot;
in[v]++;
return;
}
void Init() {
cnt=0;
tot=0;
memset(in,0,sizeof(in));
memset(ans,0,sizeof(ans));
memset(head,0,sizeof(head));
memset(edge,0,sizeof(edge));
return;
}
void Read() {
scanf("%d%d",&n,&m);
for(int i=1;i<=m;i++) {
int u,v;
scanf("%d%d",&u,&v);
addEdge(v,u);
}
return;
}
void Topo() {
priority_queue <int> q;
for(int i=1;i<=n;i++) {
if(!in[i]) {
q.push(i);
}
}
while(!q.empty()) {
int t=q.top();
q.pop();
ans[++cnt]=t;
for(int i=head[t];i;i=edge[i].nxt) {
int t=edge[i].to;
in[t]--;
if(!in[t]) {
q.push(t);
}
}
}
return;
}
void Print() {
for(int i=1;i<=n;i++) {
if(in[i]) {
printf("Impossible!\n");
return;
}
}
for(int i=cnt;i>=1;i--) {
printf("%d ",ans[i]);
}
printf("\n");
return;
}
int main()
{
scanf("%d",&d);
for(int i=1;i<=d;i++) {
Init();
Read();
Topo();
Print();
}
return 0;
}
最新文章
- webp性能测评
- linux下如何修改weblogic console登陆的用户名和密码
- long(Long)与int(Integer)之间的转换
- DFS:Red and Black(POJ 1979)
- SSH2中memcached作为hibernate二级缓存
- 简单方法打包.net程序集脱离framework
- 【bzoj1031】[JSOI2007]字符加密Cipher
- 磁珠在PCB中的应用
- ASP.NET Web API和ASP.NET Web MVC中使用Ninject
- Python快捷键
- Canvas基础讲义
- 3DTouch简单了解
- sqlserver 以年月日为条件查询记录
- php插入mysql中文数据出现乱码
- Zookeeper系列目录
- python基础——dict和set(字典和集合)
- Redis集合 安装 哨兵集群 配置
- mongodb删除重复数据
- 从Tomcat的处理web请求分析Java的内存模型
- 监控IIS的运行状态
热门文章
- Django_图片的上传下载显示配置
- java获取当前年、半年、季度、月、日、小时 开始结束时间等
- python openpyxl模块实现excel的读取,新表创建及原数据表追加新数据
- Web基础和servlet基础
- 面向对象分析与设计—OOD部分
- Python02之continue,break语句
- ORAchk - 数据库配置检查工具
- python 之 logger日志 字典配置文件
- [UOJ#404][CTSC2018]组合数问题(79分,提交答案题,模拟退火+匈牙利+DP)
- 用ASP.NET Web API技术开发HTTP接口(二)