Cleaning Shifts bzoj-3389 Usaco-2004Dec

题目大意:每天有n个时间段,每个时间段都必须安排一个奶牛值班。有m个奶牛,每个奶牛只有一个空闲时间s[i]~e[i],求至少动用多少奶牛。

注释:$1\le n\le 10^6$,$1\le m\le 25,000$。

想法:神题

我们将所有的时间点排成一排,然后对每一个i+1向i连一条无代价的边。

对于每一个s[i]向其对应的e[i]连边,代价为1.

然后求1到n的最短路即可

这样建图的道理:首先,从后面的时间点向前面的时间点连边是没有任何问题的。这就相当于我已经管理到了x时间段,我雇佣一个开始于x之前的奶牛,显然是可行且无代价的。

那么从s[i]向e[i]连边,就是说我雇佣这头奶牛,此时我已经管理到了e[i]这个时间点。

最后,附上丑陋的代码... ...

#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <queue>
#define M 1000010
#define N 30010
using namespace std;
int dis[M];
bool v[M];
struct cmp
{
bool operator()(int x,int y)
{
return dis[x]>dis[y];
}
};
priority_queue<int,vector<int>,cmp>q;
int head[M],to[N+M],nxt[N+M],val[N+M],tot;
inline void add(int x,int y,int z)
{
to[++tot]=y;
val[tot]=z;
nxt[tot]=head[x];
head[x]=tot;
}
inline void original()
{
memset(dis,0x3f,sizeof dis);
}
int main()
{
int n,m;
cin >> n >> m ;
for(int i=1;i<=m;i++) add(i,i-1,0);
original();
for(int x,y,i=1;i<=n;i++)
{
scanf("%d%d",&x,&y);
add(x-1,y,1);
}
dis[0]=0;
q.push(0);
while(!q.empty())
{
int x=q.top();q.pop();
if(v[x]) continue;
for(int i=head[x];i;i=nxt[i])
{
if(v[to[i]]) continue;
if(dis[to[i]]>dis[x]+val[i])
{
dis[to[i]]=dis[x]+val[i];
q.push(to[i]);
}
}
}
if(dis[m]==0x3f3f3f3f) printf("-1\n");
else printf("%d\n",dis[m]);
return 0;
}

小结:好题,感觉自己图论菜的一匹... ...

最新文章

  1. IOS应用内存释放机制
  2. Unable to determine if the owner (Domain\UserName) of job JOB_NAME has server access
  3. 简单几何(凸包+枚举) POJ 1873 The Fortified Forest
  4. Linux信号(signal) 机制分析
  5. JS常用的设计模式(7)—— 外观模式
  6. Linq 实现普通sql中 where in 的功能
  7. Windows Sublime Text 配置Linux子系统(WSL)下的 gcc/g++ 编译环境
  8. [BZOJ1601] [Usaco2008 Oct] 灌水 (kruskal)
  9. 发个2012年用java写的一个控制台小游戏
  10. 【面试笔试算法】Program 4 : Best Compression Algorithms(网易游戏笔试题)
  11. NodeJs操作MongoDB之多表查询($lookup)与常见问题
  12. 第四节:MVC中AOP思想的体现(四种过滤器)并结合项目案例说明过滤器的实际用法
  13. c#UDP协议
  14. 高通 sensor 从native到HAL
  15. TTPRequest 提示#import &lt;libxml/HTMLparser.h&gt;找不到 的解决方法
  16. 域名 ip地址 端口号
  17. 反转链表(不改变指针)JAVA版
  18. JSON数组,JSON对象,数组的区别与基本操作整理
  19. 关于map和hashmap
  20. python基础学习之路No.4 数据转换以及操作

热门文章

  1. bzoj5085: 最大
  2. BNUOJ -&gt;Borrow Classroom(LCA)
  3. B1934 [Shoi2007]Vote 善意的投票 最小割
  4. LuoguP3621 [APIO2007]风铃
  5. Python开发利器PyCharm 2.7附注册码
  6. E20170902-hm
  7. JS——事件详情(鼠标事件:clientX、clientY的用法)
  8. 基于CGAL的Delaunay三角网应用
  9. Unity引擎GUI之Image
  10. Azure Service Bus