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;
}

最新文章

  1. webp性能测评
  2. linux下如何修改weblogic console登陆的用户名和密码
  3. long(Long)与int(Integer)之间的转换
  4. DFS:Red and Black(POJ 1979)
  5. SSH2中memcached作为hibernate二级缓存
  6. 简单方法打包.net程序集脱离framework
  7. 【bzoj1031】[JSOI2007]字符加密Cipher
  8. 磁珠在PCB中的应用
  9. ASP.NET Web API和ASP.NET Web MVC中使用Ninject
  10. Python快捷键
  11. Canvas基础讲义
  12. 3DTouch简单了解
  13. sqlserver 以年月日为条件查询记录
  14. php插入mysql中文数据出现乱码
  15. Zookeeper系列目录
  16. python基础——dict和set(字典和集合)
  17. Redis集合 安装 哨兵集群 配置
  18. mongodb删除重复数据
  19. 从Tomcat的处理web请求分析Java的内存模型
  20. 监控IIS的运行状态

热门文章

  1. Django_图片的上传下载显示配置
  2. java获取当前年、半年、季度、月、日、小时 开始结束时间等
  3. python openpyxl模块实现excel的读取,新表创建及原数据表追加新数据
  4. Web基础和servlet基础
  5. 面向对象分析与设计—OOD部分
  6. Python02之continue,break语句
  7. ORAchk - 数据库配置检查工具
  8. python 之 logger日志 字典配置文件
  9. [UOJ#404][CTSC2018]组合数问题(79分,提交答案题,模拟退火+匈牙利+DP)
  10. 用ASP.NET Web API技术开发HTTP接口(二)