输入数据:

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. 《Java程序设计》第五次实验实验报告

    实验封面 一.实验内容 1.阅读理解源码进入07_httpd所在的目录,使用vi编辑器理解源代码. 2.编译应用程序使用gcc编译器,分别对文件夹下的copy.c和httpd.c进行编译,出现copy ...

  2. Android WebView使用深入浅出

    目前很多android app都内置了可以显示web页面的界面,会发现这个界面一般都是由一个叫做WebView的组件渲染出来的,学习该组件可以为你的app开发提升扩展性. 先说下WebView的一些优 ...

  3. OOP多态和继承要点

         早期绑定和多态 C#函数重载的签名规则是用参数的类型和数量判断,而不是函数的名字. 函数返回值不作为重载签名. 修饰符不作为签名的一部分,如static 同函数中,多个参数名称要唯一 ref ...

  4. IT男的”幸福”生活"续1

    IT男的”幸福”生活"续1 我和LL开始下步追妹计划...... 知彼知已,方能把握机会.没想到孙子兵法太给力了,据LL了解,MM(她)是湖北人,找对象一般不会考虑外省的.高度165左右,相 ...

  5. 变量监控 指令 gt-wach

    index8.html <html><head> <title>变量监控指令 gt-watch</title> <script src=" ...

  6. 微信小程序开发:http请求

    在微信小程序进行网络通信,只能和指定的域名进行通信,微信小程序包括四种类型的网络请求. 普通HTTPS请求(wx.request) 上传文件(wx.uploadFile) 下载文件(wx.downlo ...

  7. 个人搜藏小技巧:eclipse 设定proxy,仍不能连网的问题

    有的eclipse在perferences->General->Network connection设定代理后,仍不能连接网络下载jar.解决方法:在eclipse.ini下面加: -Do ...

  8. CSS3之过渡Transition

    CSS3中的过渡Transition有四个中心属性:transition-property.transition-duration.transition-delay和transition-timing ...

  9. JavaScript、CSS、JSP 实现用户注册页面与信息校验

    参考:http://blog.csdn.net/fightfaith/article/details/50277337 需求:实现用户注册页面并作出逻辑校验.要求: (1)完成注册页面样式如下: (2 ...

  10. iOS开发小技巧--字典和数组的中文输出

    一.在解析json数据的时候,得到的集合对象或者数组对象在用%@打印的时候回出现类似乱码的情况.如图: 在iOS中打印字典或者数组对象,系统会默认调用字典对象和数组对象的descriptionWith ...