很容易想到优先队列+拓扑排序。关键点是有限制条件者有限,无限制条件者在最后,条件相同者按序输出。因此采用逆序。

 #include <iostream>
#include <queue>
#include <algorithm>
#include <cstdio>
#include <cstring>
using namespace std; #define MAXN 30005 typedef struct {
int to, next;
} edge_st; edge_st edges[];
int adj[MAXN], L;
int deg[MAXN];
int buf[MAXN]; typedef struct node_st{
int i;
node_st() {}
node_st(int ii) {
i = ii;
}
friend bool operator <(node_st a, node_st b) {
return a.i < b.i;
}
} node_st; void add(int u, int v) {
edges[L].to = v;
edges[L].next = adj[u];
adj[u] = L++;
++deg[v];
} void init() {
L = ;
memset(deg, , sizeof(deg));
memset(adj, , sizeof(adj));
} int main() {
int T, n, m;
int i, j, k;
node_st nd; scanf("%d", &T);
while (T--) {
scanf("%d%d", &n, &m);
init();
while (m--) {
scanf("%d %d", &j, &k);
add(k, j);
}
priority_queue<node_st> Q;
for (i=; i<=n; ++i)
if (deg[i] == )
Q.push(node_st(i));
k = ;
while (!Q.empty()) {
nd = Q.top();
buf[k++] = nd.i;
Q.pop();
for (i=adj[nd.i]; i; i=edges[i].next) {
deg[edges[i].to]--;
if (deg[edges[i].to] == )
Q.push(node_st(edges[i].to));
}
}
for (i=k-; i>=; --i)
if (i)
printf("%d ", buf[i]);
else
printf("%d\n", buf[i]);
} return ;
}

【HDOJ】4857 逃生的更多相关文章

  1. 转 :hdoj 4857 逃生【反向拓扑】

    逃生 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submissi ...

  2. HDOJ 4857 逃生

    BestHack.....真乱..... 逃生 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/ ...

  3. HDU 4857 逃生 (反向拓扑排序 & 容器实现)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4857 逃生 Time Limit: 2000/1000 MS (Java/Others)    Mem ...

  4. hdu 4857 逃生

    题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=4857 逃生 Description 糟糕的事情发生啦,现在大家都忙着逃命.但是逃命的通道很窄,大家只能 ...

  5. hdu 4857 逃生 拓扑排序+PQ,剥层分析

    pid=4857">hdu4857 逃生 题目是求拓扑排序,但不是依照字典序最小输出,而是要使较小的数排在最前面. 一開始的错误思路:给每一个点确定一个优先级(该点所能到达的最小的点) ...

  6. 正向与反向拓扑排序的区别(hdu 1285 确定比赛名次和hdu 4857 逃生)

    确定比赛名次 Time Limit : 2000/1000ms (Java/Other)   Memory Limit : 65536/32768K (Java/Other) Total Submis ...

  7. HDU 4857 逃生 (优先队列+反向拓扑)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4857 解题报告:有n个点,有m个条件限制,限制是像这样的,输入a  b,表示a必须排在b的前面,如果不 ...

  8. (hdu) 4857 逃生 (拓扑排序+优先队列)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4857 Problem Description 糟糕的事情发生啦,现在大家都忙着逃命.但是逃命的通道很窄 ...

  9. HDU 4857 逃生(反向建边的拓扑排序+贪心思想)

    逃生 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submissi ...

随机推荐

  1. 汉诺塔III 递推题

    题目描述: 约19世纪末,在欧州的商店中出售一种智力玩具,在一块铜板上有三根杆,最左边的杆上自上而下.由小到大顺序串着由64个圆盘构成的塔.目的是将最左边杆上的盘全部移到右边的杆上,条件是一次只能移动 ...

  2. python实现登录函数,比较简单

    一个简单的python实现登录以及修改密码的函数 #密码错误3次,锁定登录: password_list = ['] def account_login(): Tries = 3 while Trie ...

  3. Verilog之event的用法

    编写verilog的testbench时,可使用event变量触发事件. event变量声明为: event var; event触发为: ->var; 捕获触发为: @(var); 在mode ...

  4. 经验分享:CSS浮动(float,clear)通俗讲解(转载)

    很早以前就接触过CSS,但对于浮动始终非常迷惑,可能是自身理解能力差,也可能是没能遇到一篇通俗的教程. 前些天小菜终于搞懂了浮动的基本原理,迫不及待的分享给大家. 写在前面的话: 由于CSS内容比较多 ...

  5. FusionChart学习笔记(部分)

    目录 第一阶段    1 一.创建第一个FusionChart    1 (1)导入js文件    1 (2)定义Div Id    1 (3)定义xml格式的数据文件    1 (4)编写js代码  ...

  6. Android开发手记(23) Notification

    有时候,我们需要应用程序在状态内显示一些通知信息,这时我们就需要使用Notification来完成这一工作.也许我们会想到以前经常使用的Toast来通知用户.虽然Notification与Toast都 ...

  7. show_space.sql.txt

    create or replace procedure SHOW_SPACE(P_SEGNAME   IN VARCHAR2, P_OWNER     IN VARCHAR2 DEFAULT USER ...

  8. Java Calendar 计算时间差

    public static void main(String[] args) { Calendar c=Calendar.getInstance(); int y=2016;//年 int M=1;/ ...

  9. 几种常见ECG数据格式及对比

    SCP.DICOM.HL7aECG.GDF格式及对比 本文档首先给出SCP.DICOM.HL7aECG.GDF四种心电信号格式的具体数据结构,然后分析其各自的特点及适用范围. 一.SCP-ECG fo ...

  10. 【USACO 1.2.2】方块转换

    [问题描述] 一块N x N(1<=N<=10)正方形的黑白瓦片的图案要被转换成新的正方形图案.写一个程序来找出将原始图案按照以下列转换方法转换成新图案的最小方式: 1:转90度:图案按顺 ...