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个人,每个人都有一个固定的开始工作的时间,这也意味着从这个 ...
随机推荐
- 다음에 적용될 Auto_increment 값 알아 내기 (计算下一个Auto_increment的值)
Mysql 4.X <------ SHOW TABLE STATUS FROM [DB_NAME] LIKE '[TABLE_NAME]'; Mysql 5.X ----------- ...
- Maven(3.0.5) 环境的安装配置
Maven 安装步骤 JDK 安装:在使用 Maven 之前,要确定已经安装了 JDK. huey@huey-K42JE:~$ java -version java version "1.7 ...
- 快速了解Scala技术栈
http://www.infoq.com/cn/articles/scala-technology/ 我无可救药地成为了Scala的超级粉丝.在我使用Scala开发项目以及编写框架后,它就仿佛凝聚成为 ...
- LeetCode初体验—twoSum
今天注册了大名鼎鼎的LeetCode,做了一道最简单的算法题目: Given an array of integers, return indices of the two numbers such ...
- 合理配置MySQL缓存 提高缓存命中率
众所周知,系统读取数据时,从内存中读取要比从硬盘上速度要快好几百倍.故现在绝大部分应用系统,都会最大程度的使用缓存(内存中的一个存储区域),来提高系统的运行效率.MySQL数据库也不例外.在这里,笔者 ...
- 简化版的Flappy Bird开发过程(不使用第三方框架)
目录 .1构造世界 .2在世界中添加元素 .3碰撞检测 .4添加动画特效 .5总结 .0 开始之前 之前曾经用Html5/JavaScript/CSS实现过2048,用Cocos2d-html5/Ch ...
- (poj)3268 Silver Cow Party 最短路
Description One cow ≤ N ≤ ) conveniently numbered ..N ≤ X ≤ N). A total of M ( ≤ M ≤ ,) unidirection ...
- Poj 1001 / OpenJudge 2951 Exponentiation
1.链接地址: http://poj.org/problem?id=1001 http://bailian.openjudge.cn/practice/2951 2.题目: Exponentiatio ...
- javascripct数组
定义数组 数组对象用来在单独的变量名中存储一系列的值. 我们使用关键词 new 来创建数组对象.下面的代码定义了一个名为 myArray 的数组对象: var myArray=new Array() ...
- win7定时任务
最近某app有个小抽奖,每天点击太麻烦,想做个定时任务访问抽奖链接(带着cookie登录信息,即可抽奖成功) 刚开始做了php,最后发现部署在百度bae中没法做定时任务每天执行,后来换成了python ...