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个人,每个人都有一个固定的开始工作的时间,这也意味着从这个 ...
随机推荐
- 模仿微博 用OC语言编写
演示如下 源代码下载:模仿微博.zip
- Extjs3 Combo实现百度搜索查询
在Extjs中实现Combo手输模糊筛选出下拉框数据.之前一直利用的Combo的keyup来实时的请求数据库进行查询.最近发现了一个更好的方式:只需要引用一个ComboBoxQuery Ext.ns( ...
- WCF编程系列(七)信道及信道工厂
WCF编程系列(七)信道及信道工厂 信道及信道栈 前面已经提及过,WCF中客户端与服务端的交互都是通过消息来进行的.消息从客户端传送到服务端会经过多个处理动作,在WCF编程模型中,这些动作是按层 ...
- WCF编程系列(一)初识WCF
WCF编程系列(一)初识WCF Windows Communication Foundation(WCF)是微软为构建面向服务的应用程序所提供的统一编程模型.WCF的基本概念: 地址:定义服务的 ...
- oc 基础知识
一.枚举 结构体 typedef enum{ sexMan, sexWoman }Sex; tydedef struct{ int year; int month; int da ...
- Java实战之03Spring-03Spring的核心之AOP(Aspect Oriented Programming 面向切面编程)
三.Spring的核心之AOP(Aspect Oriented Programming 面向切面编程) 1.AOP概念及原理 1.1.什么是AOP OOP:Object Oriented Progra ...
- TCP传输小数据包效率问题(译自MSDN)
TCP传输小数据包效率问题(译自MSDN) http://www.ftpff.com/blog/?q=node/16 摘要:当使用TCP传输小型数据包时,程序的设计是相当重要的.如果在设计方案中不对T ...
- mysql时间与日期函数
返回日期相关的 Now() || CURRENT_TIMESTAMP();返回当前时间 to_days(date) 返回日期date是西元0年至今多少天(不计算1582年以前) 转换为天数 date是 ...
- Sass:一种CSS预处理器语言
http://sass-lang.com/ Sass是一种CSS预处理器语言,通过编程方式生成CSS代码.因为可编程,所以操控灵活性自由度高,方便实现一些直接编写CSS代码较困难的代码. 同时,因为S ...
- STM32F407移植contiki2.6后使用LWIP库实现tcp client
最近在做智能家居,物联网项目,用到了C下的contiki移植 经过一阵调试,终于在 STM32F407移植contiki2.6后使用LWIP库实现tcp client. 一路艰辛谁人知道....唯有留 ...