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

 #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. [转] 多线程下变量-gcc原子操作 __sync_fetch_and_add等

    http://blog.sina.com.cn/s/blog_6f5b220601013zw3.html 非常好的原子操作,不用加锁:__sync_fetch_and_add GCC 提供的原子操作 ...

  2. 模板-->求逆矩阵(利用初等变换求解)

    如果有相应的OJ题目,欢迎同学们提供相应的链接 相关链接 所有模板的快速链接 简单的测试 INPUT: 3 2 1 0 1 2 1 1 1 1 OUTPUT: 0.5 -0.5 0.5 0 1 -1 ...

  3. Word 查找替换,通配符一览表

    Word查找替换详细用法及通配符一览表 使用通配符要查找“?”或者“*”,可输入“\?”和“\*”,\1\2\3依次匹配数对括号内容查找(a)12(b)   替换\2XY\1   结果:bXYa ([ ...

  4. .NET aspx页面中的按钮无法响应事件

    原因只有一个,页面中存在多个form标签.按Ctrl+F,找到多余的删掉即可

  5. http2.0

    HTTP2.0性能增强的核心:二进制分帧 HTTP 2.0最大的特点: 不会改动HTTP 的语义,HTTP 方法.状态码.URI 及首部字段,等等这些核心概念上一如往常,却能致力于突破上一代标准的性能 ...

  6. C#实现自动切割图片

    由于做一个TD游戏需要一些图片素材,可是现有的从网上下载的<保卫萝卜>的图片资源是多张图片合在一起的,并且没有什么规则,虽然有 个xml文件似乎用来描述此图片内子图片位置大小等信息,但由于 ...

  7. (转)PHP的ereg()与eregi()的不同及相同点。对比

    ereg() 字符串比对解析. 语法: int ereg(string pattern, string string, array [regs]); 返回值: 整数/数组 函数种类: 资料处理 内容说 ...

  8. Android之使用json进行网络数据交换

    JSON作为一种轻量级的数据交换格式,凭借其易于阅读和编写.易于解析.传输速度快等优点流行了起来.最近正好在学习Android端从服务端端取数据,Json便派上了用场.好,下面开始切入主题. 1.准备 ...

  9. Swift 提示 error running playground...

    创建playground之后,我们将得到一个错误提示,Error running playground: Failed to prepare for communication with playgr ...

  10. [转]Delphi 中 image 控件加载bmp、JPG、GIF、PNG等图片的办法

    procedure TForm1.Button1Click(Sender: TObject); var jpg: TJPEGImage; // 要use Jpeg单元 begin // 显示jpg大图 ...