博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
hdu2647(拓扑排序)
阅读量:5103 次
发布时间:2019-06-13

本文共 731 字,大约阅读时间需要 2 分钟。

这道题题意很简单,老板给员工发福利,有些员工要求自己的福利必须比某个人高,老板希望在满足所有人的要求下,总花费最小。

拓扑排序分层,反向建表,正向也可以,只不过计算稍微麻烦些,但更接近题意。

这道题我还是卡了一会的,一开始用下标模拟堆栈的方法wa了好多次,后来试着调用stl的栈,接着wa,才发现是自己的分层策略和栈的性质不相容。

我的分层策略是,若有个点,在删去一个边之后入度变为0,则这个点的层数为刚刚删掉的那条边的起点的层数加1。

使用这种策略加上用栈会在处理一些特殊情况是发生错误。后来改为用队列才AC。

#include 
#include
#include
#include
#include
using namespace std;int counter[10005];int Rank[10005];int N,M;vector
> v;bool TopoOrder(){ queue
S; int top=-1; //下表模拟堆栈 for(int i=1;i<=N;i++) { if(counter[i]==0) { Rank[i]=0; S.push(i); } } //弹栈顶操作一共要进行N次,每次拿出一个顶点,删去它所连接的边,共有N个顶点所以要做N次 for(int i=0;i

  

转载于:https://www.cnblogs.com/modengdubai/p/4730877.html

你可能感兴趣的文章
待整理
查看>>
一次动态sql查询订单数据的设计
查看>>
C# 类(10) 抽象类.
查看>>
Nginx+Keepalived 实现双击热备及负载均衡
查看>>
Vue_(组件通讯)子组件向父组件传值
查看>>
jvm参数
查看>>
Something-Summary
查看>>
Spring学习笔记
查看>>
6个有用的MySQL语句
查看>>
我对前端MVC的理解
查看>>
Silverlight实用窍门系列:19.Silverlight调用webservice上传多个文件【附带源码实例】...
查看>>
2016.3.31考试心得
查看>>
mmap和MappedByteBuffer
查看>>
Linux的基本操作
查看>>
转-求解最大连续子数组的算法
查看>>
算法为啥子那么难【转】
查看>>
对数器的使用
查看>>
OracleOraDb11g_home1TNSListener服务启动后停止,某些服务在未由其他服务或程序使用时将自己主动停止...
查看>>
Redis用户添加、分页、登录、注册、加关注案例
查看>>
练习2
查看>>