原题地址

这算是我个人AC的第一个拓扑排序题目吧。

题目解读

给出几组比赛的胜负情况。推断最后的排名。依据题意这就是一个明显的拓扑排序问题了。

注意

  1. 假设由于可能的排名有多种情况,这时要保证编号小的在前。
  2. 题目输入的数据可能有反复边

拓扑排序

首先统计每一个结点的入度。

将度为0的结点编号放入队列(此题放入优先队列中)中。

然后进行循环:
  1. 取出队头结点,视作边的起点。
  2. 然后“删除与该点相连的边”。代码就是将这个图中的该边还有一个结点(即终点)的入度减一;
  3. 假设减一以后,终点的入度变为了0。那么将终点的编号入队列
  4. 推断队列是否为空。若不空,则回到1

优先队列

C++ STL中有优先队列的类——priority_queue<T>。默认优先队列是值越大,优先级越高。

所以比方priority_queue<int> q。

这里面的元素是降序排列的。

假设我们要实现升序须要重载。

priority_queue<int,vector<int>,greater<int> > q;

>>有个有意思的问题是我并没有加vector的头文件。但这样声明一个队列,却并不报错。

看来我对STL底层还是了解不深。。

代码

#include<iostream>
#include<queue>
#include<cstdio>
#include<cstring>
using namespace std;
bool map[501][501];
int in[501];
priority_queue<int,vector<int>,greater<int> > q;
void topo(int n)
{for(int i=1;i<=n;i++){if(in[i]==0)q.push(i);}int c=1;while(!q.empty()){int v=q.top();q.pop();if(c!=n){cout<<v<<" ";c++;}elsecout<<v<<endl;for(int i=1;i<=n;i++){if(!map[v][i])continue;in[i]--;if(!in[i])q.push(i);}}
}
int main()
{int n,m,i,j;while(cin>>n>>m){int k=0;memset(map,0,sizeof map);memset(in,0,sizeof in);while(m--){cin>>i>>j;if(map[i][j])continue;map[i][j]=1;in[j]++;}topo(n);}
}

转载于:https://www.cnblogs.com/gavanwanggw/p/6876536.html

hdu1285 拓扑排序+优先队列相关推荐

  1. HDU 4857 拓扑排序 优先队列

    n个数,已经有大小关系,现给m个约束,规定a在b之前,剩下的数要尽可能往前移.输出序列 大小关系显然使用拓扑结构,关键在于n个数本身就有大小关系,那么考虑反向建图,优先选择值最大的入度为零的点,这样得 ...

  2. P3243-[HNOI2015]菜肴制作【拓扑排序,优先队列】

    正题 题目链接:https://www.luogu.com.cn/problem/P3243 题目大意 nnn个数,有mmm个要求形如xxx在yyy的前面,现在要求在i−1i-1i−1尽量靠前的情况下 ...

  3. HDU1285确定比赛名次(拓扑排序+优先队列)

    题目链接 http://acm.hdu.edu.cn/showproblem.php?pid=1285 思路 每场比赛的结果我们可以看成一个有向图,从胜利的一方指向失败的一方,在这个有向图的入度为0的 ...

  4. zcmu-2153(拓扑排序+优先队列)

    2153: D.ly的排队问题 Time Limit: 1 Sec  Memory Limit: 128 MB Submit: 35  Solved: 13 [Submit][Status][Web ...

  5. GYM 100792k King's Rout (拓扑排序+优先队列)

    题目: K. King's Rout time limit per test 4 seconds memory limit per test 512 megabytes input standard ...

  6. hdu1285 拓扑排序(裸)

    确定比赛名次                                                                    Time Limit: 2000/1000 MS ( ...

  7. HDU1285拓扑排序模版题

    方法一: #include<iostream> #include<algorithm> #include<cstring> #include<cmath> ...

  8. HDU Problem 4857 逃生【拓扑排序+优先队列】

    逃生 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submiss ...

  9. HDU1285 确定名次 拓扑排序

    Problem Description 有N个比赛队(1<=N<=500),编号依次为1,2,3,....,N进行比赛,比赛结束后,裁判委员会要将所有参赛队伍从前往后依次排名,但现在裁判委 ...

最新文章

  1. centos7安装tomcat8.5
  2. python调用js获取异步返回的数据_Python怎么获取js动态加载的数据
  3. MySQL Range Optimization
  4. 实现原理 扫描枪_条码扫描枪工作原理
  5. java选择排序代码_Java排序算法总结之选择排序
  6. [Luogu P2801]教主的魔法
  7. java泛型方法的使用
  8. centos7 ies4linux,Ubuntu 7.10中通过IEs4linux安装IE6
  9. OpenKG数据逐一截图说明
  10. ARCH模型以及编程实现
  11. SwiftUI 面试问题大全
  12. 必应(Bing)的站内搜索 site:<域名> <搜索内容>
  13. MMORPG传奇类手游《空空西游》完整源码(客户端cocos2d-js+服务端pomelo+cocosStudio工程+搭建教程)
  14. springboot异常:Unrecognized field xxx , not marked as ignorable 问题
  15. java单链表反转(头插法)详解
  16. 多线程&高并发(全网最新:面试题 + 导图 + 核心学习笔记)面试手稳心不慌,轻松拿下 offer,秋招跳槽必不可少的底层能力
  17. 读<中国经济2021>
  18. win下vscode无法激活conda环境
  19. java——插件echarts数据可视化图表库
  20. MFC-画笔与画刷的使用

热门文章

  1. 深度神经网络对基于EEG的情绪识别的关键频带和通道的研究
  2. 大脑只需单个神经元就可进行XOR异或运算,Science新研究揭开冰山一角,引发热议...
  3. 微软免费AI作文打分软件升级:雅思考研四六级都能用,还能查单词给替换
  4. 阿里达摩院青橙奖再颁发!10名大陆青年科学家各获100万,最小获奖者28岁
  5. Kubernetes源码分析之kubelet
  6. javaScript入门之常用事件
  7. Sublime Text 2 和 Verilog HDL
  8. 蓝光模式引爆欧洲杯 神马搜索陪你度过激情夏日
  9. 如何编写一个全新的 Git 协议
  10. (原创)我对未来的人类的发展,以及AI技术发展的一些思考。