pid=2647">原文地址

题目分析

题意

老板发工资,可是要保证发的工资数满足每一个人的期望,比方A期望工资大于B,仅仅需比B多1元钱就可以。老板发的最低工资为888元。输出老板最少发的工资总数。若是无法满足大家的期望,则输出-1。

分析

非常明显这是一个拓扑问题。若存在环则无法满足大家的期望。若按常理,A>B,则可能会建立A指向B的有向边。此题不然,由于我们仅仅知道最少的钱数是888,所以从小到大进行拓扑排序更为恰当。所以是建立B指向A的有向边。

此之为逆拓扑排序。由于这样处理后排序的结果与原先拓扑排序的顺序相反。

以图论观点来看,若为邻接矩阵存储就视作了矩阵的逆置。

链式前向星

链式前向星是图的一种存储方式,事实上质是邻接表的静态存储。

关于链式前向星的很多其它介绍。可移步《深度理解链式前向星》。

吐槽,链式前向星并不是学术上的术语,貌似是国内网友的起名智慧。。因此国外没有这种术语。只是这个词在国内还是有认可度的。

我的代码

用了点小技巧,比方static变量。还有重载构造函数等等。因此跑了359ms(g++)43ms(c++)。

。

囧。重度追求效率的童鞋可无视。本代码重在谈思路。

#include<iostream>
#include<queue>
#include<vector>
#include<cstdio>
#include<cstring>
using namespace std;
const int max_size=10001;
int n,m;
int head[max_size];
int in[max_size];
int reward[max_size];
queue<int> q;
struct Edge
{
int to;
int next;
Edge(){};
Edge(int i,int j):to(i),next(j){};
};
Edge edges[max_size*2];
void add(int i,int j)
{
static int k=0;
edges[k].to=j;
edges[k].next=head[i];
head[i]=k++;
if(k==m)
k=0;
}
void topo()
{
for(int i=1;i<=n;i++)
{
if(in[i]==0)
{
reward[i]=0;
q.push(i);
}
}
int top;
int to;
while(!q.empty())
{
top=q.front();
q.pop();
for(int k=head[top];k!=-1;k=edges[k].next)
{
to = edges[k].to;
in[to]--;
if(in[to]==0)
q.push(to);
reward[to]=reward[top]+1;//多1块钱即可了。 。
}
}
int sum=n*888;
for(int i=1;i<=n;i++)
{
if(reward[i]<0)
{
cout<<-1<<endl;//假设奖金(工资)数组reward中还有-1存在,说明有环。
return;
}
sum+=reward[i];
}
cout<<sum<<endl;
}
int main()
{
int i,j;
while(cin>>n>>m)
{
memset(in,0,sizeof in);
memset(head,-1,sizeof head);
memset(reward,-1,sizeof reward);
for(int t=0;t<m;t++)
{
cin>>i>>j;
add(j,i);
in[i]++;
}
topo();
}
}

hdu2647 逆拓扑,链式前向星。的更多相关文章

  1. HDU-2647 Reward(链式前向星+拓扑排序)

    Reward Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submis ...

  2. 最短路 spfa 算法 && 链式前向星存图

    推荐博客  https://i.cnblogs.com/EditPosts.aspx?opt=1 http://blog.csdn.net/mcdonnell_douglas/article/deta ...

  3. POJ 3169 Layout(差分约束+链式前向星+SPFA)

    描述 Like everyone else, cows like to stand close to their friends when queuing for feed. FJ has N (2 ...

  4. poj-1459-最大流dinic+链式前向星-isap+bfs+stack

    title: poj-1459-最大流dinic+链式前向星-isap+bfs+stack date: 2018-11-22 20:57:54 tags: acm 刷题 categories: ACM ...

  5. # [Poj 3107] Godfather 链式前向星+树的重心

    [Poj 3107] Godfather 链式前向星+树的重心 题意 http://poj.org/problem?id=3107 给定一棵树,找到所有重心,升序输出,n<=50000. 链式前 ...

  6. 模板 Dijkstra+链式前向星+堆优化(非原创)

    我们首先来看一下什么是前向星.   前向星是一种特殊的边集数组,我们把边集数组中的每一条边按照起点从小到大排序,如果起点相同就按照终点从小到大排序, 并记录下以某个点为起点的所有边在数组中的起始位置和 ...

  7. 链式前向星+SPFA

    今天听说vector不开o2是数组时间复杂度常数的1.5倍,瞬间吓傻.然后就问好的图表达方式,然后看到了链式前向星.于是就写了一段链式前向星+SPFA的,和普通的vector+SPFA的对拍了下,速度 ...

  8. 单元最短路径算法模板汇总(Dijkstra, BF,SPFA),附链式前向星模板

    一:dijkstra算法时间复杂度,用优先级队列优化的话,O((M+N)logN)求单源最短路径,要求所有边的权值非负.若图中出现权值为负的边,Dijkstra算法就会失效,求出的最短路径就可能是错的 ...

  9. 图的存储结构:邻接矩阵(邻接表)&链式前向星

    [概念]疏松图&稠密图: 疏松图指,点连接的边不多的图,反之(点连接的边多)则为稠密图. Tips:邻接矩阵与邻接表相比,疏松图多用邻接表,稠密图多用邻接矩阵. 邻接矩阵: 开一个二维数组gr ...

随机推荐

  1. HTML5给我们带来了什么

    websocket 根据维基定义 WebSocket 使得客户端和服务器之间的数据交换变得更加简单,允许服务端直接向客户端推送数据而不需要客户端进行请求,在 WebSocket API 中,浏览器和服 ...

  2. 第14周 项目三-OOP版电子词典

    做一个简单的电子词典.在文件dictionary.txt中,保存的是英汉对比的一个词典,词汇量近8000个,英文.中文释义与词性间用'\t'隔开. (1)编程序,由用户输入英文词.显示词性和中文释义. ...

  3. windows进程清理脚本

    公司统一配的笔记本Thinkpad T440p,超级难用,常常内存占满.硬盘卡死,还管不了机!心里那个不爽啊!哎,不说了. 自己写了个脚本,用来强制关闭不须要的进程. 脚本例如以下: -------- ...

  4. ios内存管理2-对象之间的内存管理

    同之前一样,新建一个基于命令行的工程,在新建一个Student类和一个Book类 编写如下代码: Student.h // // Student.h // 内存管理2-对象之间的内存管理 // // ...

  5. android 屏幕尺寸的理解

    对android设备屏幕尺寸单位的理解 一.android移动设备(手机和平板)常用的关于屏幕的一些单位: 1.px:像素点,应该是一个统一的单位,与我们国际单位米(M)应该是一回事,它应该是屏幕尺寸 ...

  6. java BigDecimal的使用和四舍五入及格式规范(精准数据)

    • Java中的简单浮点数类型float和double不能够进行运算.不光是Java,在其它很多编程语言中也有这样的问题. 如果我们编译运行下面这个程序会看到什么? public   class  T ...

  7. java-创建线程的两种方式

    1. 继承Thread类 定义类继承Thread类. 覆盖run方法. 实例化子类对象,调用start()方法,从而调用run方法. 2.实现Runnable接口 定义类实现Runnable接口. 覆 ...

  8. Servlet的学习(四)

    在本篇的Servlet的学习中,主要来学习由使用MyEclipse来开发Servlet的一些小细节. 细节一:在web.xml中可以对同一个Servlet配置多个对外访问路径,并如果在web.xml中 ...

  9. javascript 交互取值

    var publicClassName; var classIdInMemory = { lastVal: publicClassName, set:function(x){ if(x != &quo ...

  10. ASP.NET - 跳转页面

    1. Response.Redirect("../Manager/AddBookInfoImages.aspx?id=" + Server.UrlEncode(ReturnValu ...