POJ 1275 Cashier Employment(差分约束)
http://poj.org/problem?id=1275
题意 : 一家24小时营业的超市,要雇出纳员,需要求出超市每天不同时段需要的出纳员数,午夜只需一小批,下午需要多些,希望雇最少的人,给出每小时需要的出纳员的最少数量,R(0),R(1),...,R(23)。R(0)表示从午夜到凌晨1:00所需要出纳员的最少数目;R(1)表示凌晨1:00到2:00之间需要的;以此类推。这些数据每一天都是相同的。有N人申请这工作,申请者 i ,从一个特定的时刻开始连续工作恰好8小时。定义ti(0<=ti<=23)为上面提到的开始时刻,也就是说,如果第i个申请者被录用,他)将从 ti 时刻开始连续工作8小时。
思路 :差分约束,挺难的,看了好多人的题解,才稍微懂一些了,http://972169909-qq-com.iteye.com/blog/1185527,这个神写的不错,,,还有黑书上也有解释

其实说的有点那啥,我一开始也还是没怎么看懂
#include <iostream>
#include <stdio.h>
#include <string.h>
#include <queue> using namespace std; const int INF = ;
struct node
{
int u,v,w ;
int next ;
} map[] ;
bool flag[] ;
int cnt,pre[],cntt[],dist[] ;
int r[],t[] ; void addedge(int u,int v,int w)
{
map[cnt].v = v ;
map[cnt].w = w ;
map[cnt].next = pre[u] ;
pre[u] = cnt++ ;
} void Init()
{
cnt = ;
memset(pre,-,sizeof(pre)) ;
memset(cntt,,sizeof(cntt)) ;
memset(flag,false,sizeof(flag)) ;
} bool spfa(int start)
{
queue<int >Q ;
for(int i = ; i < ; i++)
dist[i] = -INF ;
dist[start] = ;
Q.push(start) ;
flag[start] = true ;
while(!Q.empty())
{
int u = Q.front() ;
Q.pop() ;
if(++cntt[u] > )
return false ;
flag[u] = false ;
for(int i = pre[u] ; i + ; i = map[i].next)
{
int v = map[i].v ,w = map[i].w;
if(dist[v] < dist[u] + w)
{
dist[v] = dist[u] + w ;
if(!flag[v])
{
flag[v] = true ;
Q.push(v) ;
}
}
}
}
return true ;
}
int main()
{
int T ;
scanf("%d",&T) ;
while(T--)
{
for(int i = ; i <= ; i++)
scanf("%d",&r[i]) ;
int N ,s;
scanf("%d",&N) ;
memset(t,,sizeof(t)) ;
for(int i = ; i < N ; i++)
{
scanf("%d",&s) ;
t[s + ]++ ;
}
int low = ,high = N ;
bool flagg = false ;
while(low < high)
{
Init() ;
int mid = (low+high)>> ;
for(int i = ; i <= ; i++)
{
addedge(i-,i,) ;
addedge(i,i-,-t[i]) ;
}
for(int i = ; i <= ; i++)
addedge(i-,i,r[i]) ;
for(int i = ; i <= ; i++)
addedge(i+,i,r[i]-mid) ;
addedge(,,mid) ;
if(spfa())
{
high = mid ;
flagg = true ;
}
else low = mid+ ;
}
if(flagg)
printf("%d\n",high) ;
else printf("No Solution\n") ;
}
return ;
}
POJ 1275 Cashier Employment(差分约束)的更多相关文章
- poj 1275 Cashier Employment - 差分约束 - 二分答案
A supermarket in Tehran is open 24 hours a day every day and needs a number of cashiers to fit its n ...
- POJ 1275 Cashier Employment 挺难的差分约束题
http://poj.org/problem?id=1275 题目大意: 一商店二十四小时营业,但每个时间段需求的雇员数不同(已知,设为R[i]),现有n个人申请这份工作,其可以从固定时间t连续工作八 ...
- 图论(差分约束系统):POJ 1275 Cashier Employment
Cashier Employment Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 7651 Accepted: 288 ...
- 【POJ1275】Cashier Employment 差分约束
[POJ1275]Cashier Employment 题意: 超市经历已经提供一天里每一小时需要出纳员的最少数量————R(0),R(1),...,R(23).R(0)表示从午夜到凌晨1:00所需要 ...
- POJ1275/ZOJ1420/HDU1529 Cashier Employment (差分约束)
转载请注明出处: http://www.cnblogs.com/fraud/ ——by fraud 题意:一商店二十四小时营业,但每个时间段需求的出纳员不同,现有n个人申请这份工作, ...
- hdu1529 Cashier Employment[差分约束+二分答案]
这题是一个类似于区间选点,但是有一些不等式有三个未知量参与的情况. 依题意,套路性的,将小时数向右平移1个单位后,设$f_i$为前$i$小时工作的人数最少是多少,$f_{24}$即为所求.设$c_i$ ...
- poj 1275 Cashier Employment
http://poj.org/problem?id=1275 #include <cstdio> #include <cstring> #include <algorit ...
- HDU.1529.Cashier Employment(差分约束 最长路SPFA)
题目链接 \(Description\) 给定一天24h 每小时需要的员工数量Ri,有n个员工,已知每个员工开始工作的时间ti(ti∈[0,23]),每个员工会连续工作8h. 问能否满足一天的需求.若 ...
- Cashier Employment 差分约束
题意:有一个超市需要一些出纳员,已给出这个超市在各个时间段(0-1,1-2,2-3...共24个时间段)至少需要的出纳员数目,现在前来应聘有n个人,每个人都有一个固定的开始工作的时间,这也意味着从这个 ...
随机推荐
- 《java JDK7 学习笔记》之键值对Map
一.常用的Map操作类 1.使用HashMap Map也支持泛型语法,泛型的Map实例: 建立Map操作对象时,可以使用泛型语法指定键与值的类型.上图键使用String,值也使用String类型.要建 ...
- 用JQuery中的Ajax方法获取web service等后台程序中的方法
用JQuery中的Ajax方法获取web service等后台程序中的方法 1.准备需要被前台html页面调用的web Service,这里我们就用ws来代替了,代码如下: using System; ...
- Opencv——灰度直方图
灰度直方图是灰度级的函数,它表示图像中具有某种灰度级的像素的个数,反映了图像中某种灰度出现的频率. 如果将图像总像素亮度(灰度级别)看成是一个随机变量,则其分布情况就反映了图像的统计特性,这可用pro ...
- kettle中Get Data from XML , Jason Input , 文本文件输入 使用示例
1.Get Data from XML xml文件内容: <head> <img id="1">菜||焦溜丸子||2013-03-28/image/0/00 ...
- Linux的僵尸进程产生原因及解决方法
Linux的僵尸进程产生原因及解决方法: 1. 产生原因: 在UNIX 系统中,一个进程结束了,但是他的父进程没有等待(调用wait / waitpid)他,那么他将变成一个僵尸进程.通过ps命令查看 ...
- [转]js中几种实用的跨域方法原理详解
转自:js中几种实用的跨域方法原理详解 - 无双 - 博客园 // // 这里说的js跨域是指通过js在不同的域之间进行数据传输或通信,比如用ajax向一个不同的域请求数据,或者通过js获取页面中不同 ...
- 微软自带iscsi客户端对iqn的要求
节点名称:Microsoft iSCSI 发起程序严格遵守为 iSCSI 节点名称指定的规则.这些规则也适用于 Microsoft iSCSI 发起程序节点名称以及发现的任何目标节点名称.构建 iSC ...
- mysql---左连接、右连接、内连接之间的区别与联系
现有两张表 第一张表为男生表,记录了男生的姓名和配偶的编号 第二张表为女生表,记录了女生的姓名和自己的编号 第一种情况:主持人请所有男生都上台,并且带上自己的配偶.这时不管男生有没有配偶都要上台,所以 ...
- jQuery实例-简单选项卡-【一些常见方法(2)-练习】
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- jQuery Mobile里xxx怎么用呀?(控件篇)
jQuery Mobile里都有什么控件? http://api.jquerymobile.com/category/widgets/ jQuery Mobile里slider控件的change事件怎 ...