http://bailian.openjudge.cn/practice/4084/

4084:拓扑排序

描述

给出一个图的结构,输出其拓扑排序序列,要求在同等条件下,编号小的顶点在前

输入

若干行整数,第一行有2个数,分别为顶点数v和弧数a,接下来有a行,每一行有2个数,分别是该条弧所关联的两个顶点编号。
v<=100, a<=500

输出

若干个空格隔开的顶点构成的序列(用小写字母)。

样例输入

6 8
1 2
1 3
1 4
3 2
3 5
4 5
6 4
6 5

样例输出

v1 v3 v2 v6 v4 v5

思路:

传统的拓扑排序的策略是:找到入度为0的节点,直接扔入队列。

而本题中还有一个限制:不仅要找到找到入度为0的节点,此节点还不必须是标号最小的节点,

于是:我们使用小根堆,默认的元素是按照从小到大排序的,我们每次只要pop出q.top()即可。

AC Code

#include <iostream>
#include <queue>
#include <cstdio>
#include <cstring>
#include <vector>
using namespace std;
const int nmax=110;
vector<int>G[nmax];//邻接表
int inDegree[nmax];
int n,m;//点数、边数void toposort(){//queue<int>q;priority_queue<int ,vector<int>,greater<int>>q;while(!q.empty()) q.pop();for(int i=1;i<=n;i++){if(inDegree[i]==0){q.push(i);} }while(!q.empty()){int u=q.top();q.pop();printf("v%d ",u);for(int i=0;i<G[u].size();i++){int v=G[u][i];inDegree[v]--;if(inDegree[v]==0){q.push(v);}}}
} int main(int argc, char** argv) {while(scanf("%d %d",&n,&m)!=EOF){for(int i=1;i<=n;i++){G[i].clear();}memset(inDegree,0,sizeof(inDegree));int u,v;for(int i=0;i<m;i++){scanf("%d %d",&u,&v);G[u].push_back(v);inDegree[v]++;}toposort();  }return 0;
}

【拓扑排序专题】Openjudge百练 4084 拓扑排序相关推荐

  1. Python入门习题(63)——OpenJudge百练习题:DNA排序

    OpenJudge百练第1007号习题:DNA排序 题目描述 解题思路 参考答案 测试用例 小结 题目描述 来源 OpenJudge网站 – 百练习题集-第1007号习题 建议学编程的人士利用好这个网 ...

  2. 58 - 算法 -分治问题 - 循环 二分查找 OpenJudge 百练 4143和为给定数

    #define _CRT_SECURE_NO_WARNINGS #include <iostream> #include <cstdio> #include <cmath ...

  3. 贪心算法 openjudge 百练 python

    https://www.icourse163.org/learn/PKU-1001894005?tid=1450413466#/learn/content 程序设计与算法(二)算法基础 这里写目录标题 ...

  4. [OpenJudge] 百练2754 八皇后

    八皇后 Description 会下国际象棋的人都很清楚:皇后可以在横.竖.斜线上不限步数地吃掉其他棋子.如何将8个皇后放在棋盘上(有8 * 8个方格),使它们谁也不能被吃掉!这就是著名的八皇后问题. ...

  5. 整数划分问题 递归 动态规划 openjudge 百练 python

    4117:简单的整数划分问题 http://bailian.openjudge.cn/practice/4117 4119:复杂的整数划分问题 http://bailian.openjudge.cn/ ...

  6. 58 - 算法 - 百练 2503:Babelfish 二分查找与存储

    #define _CRT_SECURE_NO_WARNINGS #include <iostream> #include <cstdio> #include <cmath ...

  7. Python入门习题(82)——OpenJudge百练习题:第二大价值

    OpenJudge百练第4098号习题:第二大价值 题目描述 解题思路 参考答案 测试用例 小结 题目描述 来源 OpenJudge网站 -- 百练习题集-第4098号习题 要求 总时间限制: 300 ...

  8. Python入门习题(73)——OpenJudge百练习题:买手机

    OpenJudge百练第4069号习题:买手机 题目描述 解题思路 参考答案 测试用例 小结 题目描述 来源 OpenJudge网站 – 百练习题集-第4069号习题 要求 总时间限制: 1000ms ...

  9. Python入门习题(69)——OpenJudge百练习题:买房子

    OpenJudge百练第4022号习题:买房子 题目描述 解题思路 参考答案 测试用例 小结 题目描述 来源 OpenJudge网站 – 百练习题集-第4022号习题 要求 总时间限制: 1000ms ...

最新文章

  1. 实验2  使用T-SQL编写程序
  2. jupyter !wget 等系统命令使用技巧
  3. springmvc @responsebody json字符编码
  4. oracle 更改实便例名称,大家好,请教在oracle中能否获取update记录 所涉及的字段的名称?如能实现的话,请教相关实现方法。谢谢~...
  5. Spring Boot – spring.config.name –案例研究
  6. JeecgBoot 连接达梦数据库
  7. effective C++ 条款 11:在operator= 处理‘自我赋值’
  8. IBatisNet的配置(SqlMap.config)
  9. 将dll制作成控件_案例丨首例将影视作品制作成网络图片集被判侵权案 二审维持原判...
  10. python审计运用_用Python来分析审计行业的这10年
  11. c语言开发独立游戏,游戏项目一:c语言实现三子棋
  12. 斐讯k2路由器刷华硕固件做桥接中继
  13. asus z99s xp驱动
  14. C# 调用mschart控件
  15. 初学Linux时用到的一点复制,粘贴,删除,创建指令
  16. 组合测试术语:Pairwise/All-Pairs、OATS(Orthogonal Array Testing Strategy)
  17. 1433端口映射 架设sql server
  18. 关于有关排课的java项目_基于jsp的选排课系统-JavaEE实现选排课系统 - java项目源码...
  19. 学习笔记:百度和360关键字提交
  20. js中scroll滚动相关

热门文章

  1. linux去掉文件夹背景色
  2. 为什么不建议在MySQL中使用 utf8?
  3. 众多球员吐槽主办方 甘超宇:完全不像一个国际赛事
  4. TP-link WR740N路由器“复活记”
  5. python爬虫手机验证码登录_python爬虫解决手机验证码问题
  6. Android App打开淘宝(店铺或商品)
  7. 1682亿!!阿里工程师如何喝着茶创造双11奇迹?
  8. Tarena - 基础查询
  9. linux java性能监控工具_常用Linux 性能监测工具
  10. 阿里巴巴按关键字搜索新品数据 API