输入数据:

4 6
1 2
1 3
2 3
3 4
2 4
4 2

4 6
1 2
1 3
2 3
3 4
2 4
1 2

topo排序为偏序:

 #include<stdio.h>
#include<queue>
#include<string.h>
using namespace std;
int indegree[] ;
queue<int>q;
int n , m ;
bool map[][] ;
int a[] ;
int topo(int n)
{
int cnt = ;
while (!q.empty ())
q.pop () ; for(int i = ; i <= n ; i++) {
if (indegree[i] == ) {
q.push(i);//入度为0的点为起始点
}
} int temp ;
while(!q.empty()) {
temp = q.front();
a[cnt ++] = temp ;
q.pop();
for(int i = ; i <= n ; i++) {
if(map[temp][i]) {
indegree[i]--;
if(indegree[i] == )
q.push(i);
}
}
}
if (cnt == n) //当输出的顶点数小于图中的顶点数时,输出有回路信息
for (int i = ; i < n ; i++) {
printf ("%d----->" , a[i]) ;
}
else
puts ("The network has a cycle!") ;
} int main ()
{
// freopen ("a.txt" , "r" , stdin) ;
int u , v ;
while (~ scanf ("%d%d" , &n , &m)) {
memset (indegree , , sizeof(indegree)) ;
memset (map , , sizeof(map)) ;
for (int i = ; i < m ; i++) {
scanf ("%d%d" , &u , &v) ;
if (!map[u][v])//在u 和 v 没有连通时
indegree[v]++ ;//点v的入度++
map[u][v] = ;//表示连通
}
topo (n) ;
}
}

演示:http://www.tyut.edu.cn/kecheng1/site01/suanfayanshi/topological_sort.asp

详细:http://blog.csdn.net/dm_vincent/article/details/7714519

 -----------------hash table------------------------------------
struct Hash
{
int nxt ;
ll w ;
Hash () {}
Hash (int nxt , ll w) : nxt (nxt) , w (w) {}
}e[M];
int H[M] , E ; void init ()
{
E = ;
memset (H , , sizeof(H) ) ;
} void Insert (ll x)
{
int y = x % M ;
if (y < ) y += M ;
e[E ++] = (H[y] , x) ;
H[y] = E ;
} bool Find (ll x)
{
int y = x % M ;
if (y < ) y += M ;
for (int i = H[y] ; i ; i = e[i].nxt) {
if (e[i].w == x) return true ;
}
return false ;
}
------------------邻接表--------------------------------------------------------
struct edge
{
int u , v , w , nxt ;
edge () {}
edge (int u , int v , int w , int nxt) : u (u) , v (v) , w (w) , nxt (nxt) {}
}e[M];
int H[M] , E ;
void init ()
{
memset (H , , sizeof(H) ) ;
E = ;
} void addedge ()
{
e[E ] = edge (u , v , w , H[u]) ;
H[u] = E ++;
e[E ] = edge (v , u , w , H[v]) ;
H[v] = E ++;
}

用邻接表优化后的。时间,空间复杂度都降为O(N)

topo排序 + 用邻接表优化后的的更多相关文章

  1. 【数据结构】【图文】【oj习题】 图的拓扑排序(邻接表)

    拓扑排序: 按照有向图给出的次序关系,将图中顶点排成一个线性序列,对于有向图中没有限定次序关系的顶点,则可以人为加上任意的次序关系,由此所得顶点的线性序列称之为拓扑有序序列.显然对于有回路的有向图得不 ...

  2. POJ 1511 Invitation Cards(Dijkstra(优先队列)+SPFA(邻接表优化))

    题目链接:http://poj.org/problem?id=1511 题目大意:给你n个点,m条边(1<=n<=m<=1e6),每条边长度不超过1e9.问你从起点到各个点以及从各个 ...

  3. poj2002 hash+邻接表优化Squares

    Squares Time Limit: 3500MS   Memory Limit: 65536K Total Submissions: 17487   Accepted: 6643 Descript ...

  4. hdu.5195.DZY Loves Topological Sorting(topo排序 && 贪心)

    DZY Loves Topological Sorting Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 131072/131072 ...

  5. ACM/ICPC 之 数据结构-邻接表+DP+队列+拓扑排序(TSH OJ-旅行商TSP)

    做这道题感觉异常激动,因为在下第一次接触拓扑排序啊= =,而且看了看解释,猛然发现此题可以用DP优化,然后一次A掉所有样例,整个人激动坏了,哇咔咔咔咔咔咔咔~ 咔咔~哎呀,笑岔了- -|| 旅行商(T ...

  6. POJ 1511 - Invitation Cards 邻接表 Dijkstra堆优化

    昨天的题太水了,堆优化跑的不爽,今天换了一个题,1000000个点,1000000条边= = 试一试邻接表 写的过程中遇到了一些问题,由于习惯于把数据结构封装在 struct 里,结果 int [10 ...

  7. hdu 2647 (拓扑排序 邻接表建图的模板) Reward

    题目链接http://acm.hdu.edu.cn/showproblem.php?pid=2647 老板给员工发工资,每个人的基本工资都是888,然后还有奖金,然后员工之间有矛盾,有的员工希望比某员 ...

  8. 图论——最小生成树prim+邻接表+堆优化

    今天学长对比了最小生成树最快速的求法不管是稠密图还是稀疏图,prim+邻接表+堆优化都能得到一个很不错的速度,所以参考学长的代码打出了下列代码,make_pair还不是很会,大体理解的意思是可以同时绑 ...

  9. HUST 1103 校赛 邻接表-拓扑排序

    Description N students were invited to attend a party, every student has some friends, only if someo ...

随机推荐

  1. Qt opencv程序运行异常

    搭建了两次qt opencv vs ,经常出现程序运行异常.找了几个原因如下: 1.opencv的路径未配置或配置有误. 2.qt中pro文件包含不正确. 3.测试opencv程序不正确.如视频或图片 ...

  2. AngularJS开发指南1:AngularJS简介

    什么是 AngularJS? AngularJS 是一个为动态WEB应用设计的结构框架.它能让你使用HTML作为模板语言,通过扩展HTML的语法,让你能更清楚.简洁地构建你的应用组件.它的创新点在于, ...

  3. 分布式Web服务器架构

    最开始,由于某些想法,于是在互联网上搭建了一个网站,这个时候甚至有可能主机都是租借的,但由于这篇文章我们只关注架构的演变历程,因此就假设这个时候已经是托管了一台主机,并且有一定的带宽了,这个时候由于网 ...

  4. Eclipse自动生成UML图(转载)

    *ModelGoon是什么? 它是一个Eclipse插件,用于基于UML图的模型设计,以及逆向工程(即从已有源代码生成类图等,以作为代码分析或者文档使用). *适用条件 ModelGoon目前最新的版 ...

  5. 练习一_使用Git进行代码管理的心得

    2015年9月19日,第一次软工实践课.助教给我们介绍了git,GitHub.显而易见,我并没有听懂.所以整个上午都在找教程,一个字一个字对着敲,然后敲着敲着就出错,回宿舍,继续敲,也是一样的... ...

  6. 如何在VMWare Workstation实现虚拟机与真机的文件共享

    1.进入虚拟机的配置选项 进入方法有三种,一种是使用快捷键Ctrl+D,第二种是先右键点击虚拟机再选择Settings选项,第三种是点击快捷栏中的VM后选择Settings选项,后两种方法的截图如下. ...

  7. Servlet学习 (HttpServletRequest HttpServletResponse)

    1.什么事servlet? 答:服务器端程序, 自定义的服务类型.tomcat是一个容器,这个容器提供各种菜的服务, 我们需要为里面放菜! web服务器就是我们的开发环境和开发基础. 实现了servl ...

  8. 消灭textarea中的神秘空格

    之前在做页面的时候经常发现写的textarea中会有一些默认的空格出现,鼠标可以在里面任意点击.这个问题折腾了好久,后来发现,原来是<textarea></textarea>标 ...

  9. POJ2226 Muddy Fields

    Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 10149   Accepted: 3783 Description Rain ...

  10. Nagios告警和监控主机安装介绍(三)

    Nagios邮件告警 配置sendEmail 解压缩tar –zxvf sendEmail-v1.56.tar.gz cd sendEmail-v1.56 将可执行程序复制cp sendEmail / ...