hdu 1285 拓扑排序
2015-08-05 14:49
225 查看
简单的拓扑排序,要求字典序最小的话用优先队列来维护入度为0的点即可。
#include <iostream> #include <cstring> #include <cstdio> #include <queue> using namespace std; const int N = 501; const int M = 10000; int head ; int ans ; int in ; int n, m, e; struct Edge { int v, next; } edge[M]; void addEdge( int u, int v ) { edge[e].v = v; edge[e].next = head[u]; head[u] = e++; } void topo() { priority_queue<int, vector<int>, greater<int> > q; for ( int i = 1; i <= n; i++ ) { if ( !in[i] ) q.push(i); } int cnt = 0; while ( !q.empty() ) { int u = q.top(); q.pop(); printf("%d", u); cnt++; if ( cnt != n ) putchar(' '); else putchar('\n'); for ( int i = head[u]; i != -1; i = edge[i].next ) { int v = edge[i].v; in[v]--; if ( in[v] == 0 ) { q.push(v); } } } } int main () { while ( scanf("%d%d", &n, &m) != EOF ) { e = 0; memset( head, -1, sizeof(head) ); memset( in, 0, sizeof(in) ); while ( m-- ) { int u, v; scanf("%d%d", &u, &v); addEdge( u, v ); in[v]++; } topo(); } return 0; }
相关文章推荐
- crontab命令
- 抽象类,接口,类的区别以及使用
- 满足大部分时间项目开发要求
- HDU 2899 Strange fuction
- Hadoop文件放置策略及数据倾斜的balance方法
- C#中变量与对象、类型与类之间的区别
- 如何给jquery添加方法
- POJ 1330 Nearest Common Ancestors
- 论程序员的社会地位
- ARM汇编中的:比较指令--CMN / CMP / TEQ / TST
- Mac下 jdk1.6时 maven 控制台乱码
- UITableView中关于cell里的按钮被点击时如何确定是哪一个cell
- Leetcode编程题解
- oracle恢复某个时间点的数据快照
- 杭电1181变形课
- Android编程权威指南-第十七章挑战练习
- 自己写了个nginx启动脚本,shell
- POJ 题目2777 Count Color(线段树,区间查询染色数)
- 通过openURL启动第三方app并传参数
- 漫游Kafka实战篇之搭建Kafka运行环境