原题地址

这算是我个人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++;
}
else
cout<<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);
}
}


最新文章

  1. GitLab服务器搭建及配置
  2. EntityFramework5学习
  3. 【Android测试】【第二节】性能——CPU时间片
  4. web页面的适配问题
  5. Java ArrayList操作
  6. lintcode 中等题:subSets 子集
  7. 【转】Mybatis Generator最完整配置详解
  8. EJB开发第一个无状态会话bean、开发EJBclient
  9. ecshop删除商品函数
  10. 《javascript高级程序设计》笔记三
  11. Sql Server的艺术(五) SQL UNION与UNION JOIN运算符
  12. Java使用线程池
  13. Python、pip和scrapy的安装——Python爬虫学习笔记1
  14. 算法工程师想进一步提高竞争力?向TensorFlow开源社区贡献你的代码吧
  15. 在html页面通过js实现复制粘贴功能
  16. Confluence 6 关于统一插件管理器
  17. xcode工程编译错误之iOS解决CUICatalog: Invalid asset name supplied问题
  18. 如何用jQuery获得select的值
  19. zabbix 客户端安装配置
  20. Head First Servlets &amp; JSP 学习笔记 第二章 —— Web应用体系结构

热门文章

  1. android sqlite中判断某个表是否存在
  2. day03_12/13/2016_bean的管理之依赖注入
  3. Sqoop 产生背景(一)
  4. SQL SERVER中存储过程IN 参数条件的使用!!!
  5. MVC系列学习(五)-传递数据 与 接收数据
  6. Oracle 递归的写法(start with) 以及where条件作用域
  7. Python随笔-函数
  8. node.js安装及其环境配置
  9. html5——语义标签
  10. [Windows Server 2008] 查看ASP详细错误信息方法