【POJ 1275】 Cashier Employment
【题目链接】
【算法】
设Ti为第i小时有多少个出纳员开始工作,Vi表示第i小时有多少个来应聘的出纳员
那么,有 :
1. 0 <= Ti <= Vi
2. Ti + Ti-1 + Ti-2 + Ti-3 + Ti-4 + Ti-5 + Ti-6 + Ti-7 >= Ri
令Si = T1 + T2 + T3 + ... Ti
则 :
1. Si >= Si-1
2. Si - Si-1 <= Vi
3. Si >= Si-8 + Ri( 8 <= i <= 24)
4. Si>= Si+16 - S24 +Ri (1 <= i <= 7)
所以,我们可以枚举S24,用差分约束系统判断是否可行,枚举可以二分
【代码】
#include <algorithm>
#include <bitset>
#include <cctype>
#include <cerrno>
#include <clocale>
#include <cmath>
#include <complex>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <ctime>
#include <deque>
#include <exception>
#include <fstream>
#include <functional>
#include <limits>
#include <list>
#include <map>
#include <iomanip>
#include <ios>
#include <iosfwd>
#include <iostream>
#include <istream>
#include <ostream>
#include <queue>
#include <set>
#include <sstream>
#include <stdexcept>
#include <streambuf>
#include <string>
#include <utility>
#include <vector>
#include <cwchar>
#include <cwctype>
#include <stack>
#include <limits.h>
using namespace std; struct Edge
{
int to,w,nxt;
} e[];
int i,n,k,t,l,r,mid,ans,tot,T;
int v[],R[],dis[],head[]; inline void add(int u,int v,int w)
{
tot++;
e[tot] = (Edge){v,w,head[u]};
head[u] = tot;
}
inline bool spfa(int x)
{
int i,cur,to,w;
queue<int> q;
static bool inq[];
static int cnt[];
tot = ;
memset(head,,sizeof(head));
memset(inq,false,sizeof(inq));
memset(cnt,,sizeof(cnt));
memset(dis,,sizeof(dis));
add(,,x);
for (i = ; i <= ; i++) add(i,i-,-v[i]);
for (i = ; i <= ; i++) add(i-,i,);
for (i = ; i <= ; i++) add(i-,i,R[i]);
for (i = ; i <= ; i++) add(i+,i,R[i]-x);
while (!q.empty()) q.pop();
q.push();
dis[] = ;
inq[] = true;
cnt[] = ;
while (!q.empty())
{
cur = q.front();
q.pop();
inq[cur] = false;
for (i = head[cur]; i; i = e[i].nxt)
{
to = e[i].to;
w = e[i].w;
if (dis[cur] + w > dis[to])
{
dis[to] = dis[cur] + w;
if (!inq[to])
{
inq[to] = true;
q.push(to);
cnt[to]++;
if (cnt[to] > ) return false;
}
}
}
}
return dis[] == x;
} int main()
{ scanf("%d",&T);
while (T--)
{
memset(v,,sizeof(v));
for (i = ; i <= ; i++) scanf("%d",&R[i]);
scanf("%d",&k);
for (i = ; i <= k; i++)
{
scanf("%d",&t);
v[t+]++;
}
l = ; r = k;
ans = -;
while (l <= r)
{
mid = (l + r) >> ;
if (spfa(mid))
{
r = mid - ;
ans = mid;
} else
l = mid + ;
}
if (ans == -) printf("No Solution\n");
else printf("%d\n",ans);
} return ; }
【POJ 1275】 Cashier Employment的更多相关文章
- 【POJ 1275】 Cashier Employment(差分约束系统的建立和求解)
[POJ 1275] Cashier Employment(差分约束系统的建立和求解) Cashier Employment Time Limit: 1000MS Memory Limit: 10 ...
- 【POJ1275】Cashier Employment 差分约束
[POJ1275]Cashier Employment 题意: 超市经历已经提供一天里每一小时需要出纳员的最少数量————R(0),R(1),...,R(23).R(0)表示从午夜到凌晨1:00所需要 ...
- bzoj 2295: 【POJ Challenge】我爱你啊
2295: [POJ Challenge]我爱你啊 Time Limit: 1 Sec Memory Limit: 128 MB Description ftiasch是个十分受女生欢迎的同学,所以 ...
- 【链表】BZOJ 2288: 【POJ Challenge】生日礼物
2288: [POJ Challenge]生日礼物 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 382 Solved: 111[Submit][S ...
- BZOJ2288: 【POJ Challenge】生日礼物
2288: [POJ Challenge]生日礼物 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 284 Solved: 82[Submit][St ...
- BZOJ2293: 【POJ Challenge】吉他英雄
2293: [POJ Challenge]吉他英雄 Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 80 Solved: 59[Submit][Stat ...
- BZOJ2287: 【POJ Challenge】消失之物
2287: [POJ Challenge]消失之物 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 254 Solved: 140[Submit][S ...
- BZOJ2295: 【POJ Challenge】我爱你啊
2295: [POJ Challenge]我爱你啊 Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 126 Solved: 90[Submit][Sta ...
- BZOJ2296: 【POJ Challenge】随机种子
2296: [POJ Challenge]随机种子 Time Limit: 1 Sec Memory Limit: 128 MBSec Special JudgeSubmit: 114 Solv ...
随机推荐
- JavaScipt30(第六个案例)(主要知识点:给数字加千分号的正则)
承接上文,这是第6个案例: 附上项目链接: https://github.com/wesbos/JavaScript30 这个主要是要实现在给定的json里匹配出搜索框里的city or state, ...
- Oracle XE WM_CONCAT undifine
用docker 跑了个oracle XE 报错 没有WM_CONCAT 下载三个sql文件然后按顺序执行后可以正常使用 一:下载三个文件 解压到 oracle 目录下面 (要能找到,注意权限要o ...
- vue-router2.0二级路由的简单使用
1.app.vue中 <template> <div id="app"> <router-view></router-view> & ...
- PAT 1126 Eulerian Path
In graph theory, an Eulerian path is a path in a graph which visits every edge exactly once. Similar ...
- BZOJ 3993 Luogu P3324 [SDOI2015]星际战争 (最大流、二分答案)
字符串终于告一段落了! 题目链接: (bzoj) https://www.lydsy.com/JudgeOnline/problem.php?id=3993 (luogu) https://www.l ...
- noip模拟赛 立方数
题目描述LYK定义了一个数叫“立方数”,若一个数可以被写作是一个正整数的3次方,则这个数就是立方数,例如1,8,27就是最小的3个立方数.现在给定一个数P,LYK想要知道这个数是不是立方数.当然你有可 ...
- Maven项目pom.xml报错
1.org.apache.maven.archiver.MavenArchiver.getManifest报错 pom.xml第一行报错,如图: 解决办法: 第一步: help ->Instal ...
- Ubuntu 16.04安装GIMP替代PS
GIMP虽然不能完全替代PS,但是也能弥补一下. 系统默认源中已经包含了GIMP,不需要使用PPA这些. 安装: sudo apt-get install gimp 启动: 通过Dash搜索GIMP即 ...
- ZooKeeper实现配置中心的实例(原生API实现)(转)
说明:要实现配置中心的例子,可以选择的SDK有很多,原生自带的SDK也是不错的选择.比如使用I0Itec,Spring Boot集成等. 大型应用通常会按业务拆分成一个个业务子系统,这些大大小小的子应 ...
- 项目中应用到的框架和技术之二——ol3-ext
ol3-ext有很多很丰富的效果,可以不用重复造轮子,ol3-ext示例大全:http://viglino.github.io/ol3-ext/ 在本次项目中使用到了ol3-ext的两个功能:图层管理 ...