题目链接

分析: 
很明显,一看就是拓扑排序。 看似简单, 暗藏武器啊。 第一次做的时候一边拓扑排序一边标记他们的深度, 例如题中给的例子 {1 2;2 3;4 3 }。1的深度为1。 2、4的深度为2; 3的深度为3。 然后按深度的逆序输出深度相同的先输出小的。 其实不然啊!! 举个例子6个点, 边为{5, 3; 5,1; 5,4; 5,2; 3,1; 3,2; 6,4; 6,2; 4,2} 最好自己画一下, 看的更明白些!! 按我第一次思路 从1到6他们深度依次为1,1,2,2,3,3; 结果为5, 6,3, 4, 1, 2。 其实哩。正确结果应该为5, 3, 1, 6, 2, 4。 
最初没有比5、6大的数, 5〈 6,所以输出5。 这时相当于没有5了, 去掉5之后发现, 也没有比3大的数了, 3又小于6, 所以先输出3。 取掉3, 这时也没有比1大的数了, 在输出1………….直到输出所有点。

正确解题思路为: 
1)选一个入度为0的点p输出; 
2)从图中删除p点 
3)将p全部后继点的入度-1 
4)重复1-3,直到全部点都输出

#include<iostream>
#include<cstdio>
#include<string.h>
#include<math.h>
#include<algorithm>
using namespace std; int n, m, mx, v[], e[][], ru[];
void topu()
{
int sum = ;
int flag = ;
while(sum < n)
{
for(int i = ; i <= n; i++)
{
if(v[i] == && ru[i] == )
{
v[i] = ;
if(flag == )
{printf("%d", i);flag = ;}
else
printf(" %d", i);
for(int j = ; j <= n; j++)
{
if(e[i][j] == )
{
ru[j]--;
e[i][j] = ;
}
}
sum++;
break;
}
}
}
}
int main()
{
while(scanf("%d%d", &n, &m) != EOF)
{
memset(e, , sizeof(e));
memset(v, , sizeof(v));
memset(ru, , sizeof(ru));
for(int i = ; i <= m; i++)
{
int x, y;
scanf("%d%d", &x, &y);
if(e[x][y] == )
{
e[x][y] = ;
ru[y]++;
}
}
topu();
cout << endl;
}
return ;
}

hdoj1285 拓扑排序的更多相关文章

  1. 算法与数据结构(七) AOV网的拓扑排序

    今天博客的内容依然与图有关,今天博客的主题是关于拓扑排序的.拓扑排序是基于AOV网的,关于AOV网的概念,我想引用下方这句话来介绍: AOV网:在现代化管理中,人们常用有向图来描述和分析一项工程的计划 ...

  2. 有向无环图的应用—AOV网 和 拓扑排序

    有向无环图:无环的有向图,简称 DAG (Directed Acycline Graph) 图. 一个有向图的生成树是一个有向树,一个非连通有向图的若干强连通分量生成若干有向树,这些有向数形成生成森林 ...

  3. 【BZOJ-2938】病毒 Trie图 + 拓扑排序

    2938: [Poi2000]病毒 Time Limit: 1 Sec  Memory Limit: 128 MBSubmit: 609  Solved: 318[Submit][Status][Di ...

  4. BZOJ1565 [NOI2009]植物大战僵尸(拓扑排序 + 最大权闭合子图)

    题目 Source http://www.lydsy.com/JudgeOnline/problem.php?id=1565 Description Input Output 仅包含一个整数,表示可以 ...

  5. 图——拓扑排序(uva10305)

    John has n tasks to do. Unfortunately, the tasks are not independent and the execution of one task i ...

  6. Java排序算法——拓扑排序

    package graph; import java.util.LinkedList; import java.util.Queue; import thinkinjava.net.mindview. ...

  7. poj 3687(拓扑排序)

    http://poj.org/problem?id=3687 题意:有一些球他们都有各自的重量,而且每个球的重量都不相同,现在,要给这些球贴标签.如果这些球没有限定条件说是哪个比哪个轻的话,那么默认的 ...

  8. 拓扑排序 - 并查集 - Rank of Tetris

    Description 自从Lele开发了Rating系统,他的Tetris事业更是如虎添翼,不久他遍把这个游戏推向了全球. 为了更好的符合那些爱好者的喜好,Lele又想了一个新点子:他将制作一个全球 ...

  9. *HDU1285 拓扑排序

    确定比赛名次 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Subm ...

随机推荐

  1. socket.io使用随笔

    这段时间一直在做一个手机APP,正好使用到了socket.io.这里记录一下服务器端发送信息的几种不同方式: socket.emit('message',"this is a test&qu ...

  2. ant -verbose -debug ...

    ant -verbose -debug  (target) 可以让ant打印出所执行的command任务

  3. Apache Hadoop压缩包与Eclipse结合,导入jar包归整总结(手动)

    *************************  有些,是没必要全导入的.以后到工作了,用Maven,就自动会导入其中一些.************************ 一般,工作中,用的更多 ...

  4. SHH入门:Spring框架简介

    (1)Spring 七大模块 核心容器:核心容器提供Spring 框架的基本功能.核心容器的主要组件是 BeanFactory,它是工厂模式的实现.BeanFactory 使用控制反转 (IOC) 模 ...

  5. jquery.validate.js 应用示例

    今天发现了jQuery一个很强大的验证表单插件(jquery.validate.js 下载地址:http://bassistance.de/jquery-plugins/jquery-plugin-v ...

  6. java泛型 8 泛型的内部原理:类型擦除以及类型擦除带来的问题

    参考:java核心技术 一.Java泛型的实现方法:类型擦除 前面已经说了,Java的泛型是伪泛型.为什么说Java的泛型是伪泛型呢?因为,在编译期间,所有的泛型信息都会被擦除掉.正确理解泛型概念的首 ...

  7. C++学习笔记(六):复杂数据类型(string、容器和STL)

    STL 即Standard Template Library(标准模板库),由于C++自带的数据类型过于简单,并不能满足我们的使用需要,而STL作为C++标准的内置库为我们编写好了多种高效的数据结构和 ...

  8. Oracle- 数据库的备份

    Oracle中对数据对象和数据的管理,无疑都是使用PL/SQL Developer来进行管理,该工具也提供给我们很多方便.快捷的操作,使得我们不再为Oracle本身丑陋.难用的UI而抱怨.由于我们一般 ...

  9. [Node.js] Creating Demo APIs with json-server

    json-server makes it extremely easy to setup robust JSON apis to use for demos and proof of concepts ...

  10. [转]详述DHCP服务器的三种IP分配方式

    DHCP就是动态主机配置协议(Dynamic Host Configuration Protocol),它的目的就是为了减轻TCP/IP网络的规划.管理和维护的负担,解决IP地址空间缺乏问题.这种网络 ...