[BZOJ 4082] Surveillance
Link:
Solution:
对于链上这样的问题贪心就好了
如果在一个环上,肯定需要将环转化成链,$O(n)$确定起点才能计算
但枚举每个节点拆环再贪心的复杂度为$O(n^2)$,明显会超时
于是我们要将已知起点,计算从起点走完一圈的距离的时间复杂度降到$log(n)$
这时联想到倍增算法:
将所有区间按照右端点排序后,将每个区间和其能达到的右端点最远的区间相连
可以发现,这样就形成了一个$DAG$(每个点都只会向后连边)
接下来只要对于每个点在$DAG$上倍增即可,计算当右端点回到该点起点时的距离
Tip:$BZOJ$的题面上没写如无解则输出$impossible$
Code:
#include <bits/stdc++.h> using namespace std;
typedef pair<int,int> P;
#define X first
#define Y second
const int MAXN=1e6+,INF=<<;
P dat[MAXN];
int l,n,f[MAXN][],mn[MAXN],res; bool cmp(P a,P b){return a.Y<b.Y;} int main()
{
scanf("%d%d",&l,&n);
for(int i=;i<=n;i++)
{
scanf("%d%d",&dat[i].X,&dat[i].Y);
if(dat[i].Y<dat[i].X) dat[i].Y+=l;
}
sort(dat+,dat+n+,cmp); mn[n+]=INF;res=INF;
for(int i=n;i>=;i--) mn[i]=min(mn[i+],dat[i].X);
int cur=;
for(int i=;i<=n;i++)
{
while(cur<n && mn[cur+]-<=dat[i].Y) cur++;
if(cur!=i) f[i][]=cur;
}
for(int i=n;i>=;i--)
for(int j=;j<=;j++)
f[i][j]=f[f[i][j-]][j-]; for(int i=;i<=n;i++)
{
int cur=i,cnt=;
for(int j=;j>=;j--)
if(f[cur][j] && dat[f[cur][j]].Y<dat[i].X+l-) cur=f[cur][j],cnt+=<<j;
if(f[cur][] && dat[cur].Y<dat[i].X+l-) cur=f[cur][],cnt++;
if(dat[cur].Y>=dat[i].X+l-) res=min(res,cnt);
}
if(res==INF) puts("impossible");
else printf("%d\n",res);
return ;
}
[BZOJ 4082] Surveillance的更多相关文章
- 【BZOJ-4082】Surveillance 树链剖分 LCA + 贪心
4082: [Wf2014]Surveillance Time Limit: 40 Sec Memory Limit: 128 MBSubmit: 260 Solved: 100[Submit][ ...
- bzoj AC倒序
Search GO 说明:输入题号直接进入相应题目,如需搜索含数字的题目,请在关键词前加单引号 Problem ID Title Source AC Submit Y 1000 A+B Problem ...
- BZOJ 2127: happiness [最小割]
2127: happiness Time Limit: 51 Sec Memory Limit: 259 MBSubmit: 1815 Solved: 878[Submit][Status][Di ...
- BZOJ 3275: Number
3275: Number Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 874 Solved: 371[Submit][Status][Discus ...
- BZOJ 2879: [Noi2012]美食节
2879: [Noi2012]美食节 Time Limit: 10 Sec Memory Limit: 512 MBSubmit: 1834 Solved: 969[Submit][Status] ...
- bzoj 4610 Ceiling Functi
bzoj 4610 Ceiling Functi Description bzoj上的描述有问题 给出\(n\)个长度为\(k\)的数列,将每个数列构成一个二叉搜索树,问有多少颗形态不同的树. Inp ...
- BZOJ 题目整理
bzoj 500题纪念 总结一发题目吧,挑几道题整理一下,(方便拖板子) 1039:每条线段与前一条线段之间的长度的比例和夹角不会因平移.旋转.放缩而改变,所以将每条轨迹改为比例和夹角的序列,复制一份 ...
- 【sdoi2013】森林 BZOJ 3123
Input 第一行包含一个正整数testcase,表示当前测试数据的测试点编号.保证1≤testcase≤20. 第二行包含三个整数N,M,T,分别表示节点数.初始边数.操作数.第三行包含N个非负整数 ...
- 【清华集训】楼房重建 BZOJ 2957
Description 小A的楼房外有一大片施工工地,工地上有N栋待建的楼房.每天,这片工地上的房子拆了又建.建了又拆.他经常无聊地看着窗外发呆,数自己能够看到多少栋房子. 为了简化问题,我们考虑这些 ...
随机推荐
- JSOI2008 星球大战 [并查集]
题目描述 很久以前,在一个遥远的星系,一个黑暗的帝国靠着它的超级武器统治者整个星系. 某一天,凭着一个偶然的机遇,一支反抗军摧毁了帝国的超级武器,并攻下了星系中几乎所有的星球.这些星球通过特殊的以太隧 ...
- codeforces 1065D
题目链接:https://codeforces.com/problemset/problem/1065/D 题意:给你一个又1~n^2组成的n行n列的矩阵,你可以走日字型,直线,斜线,现在要求你从1走 ...
- 使用Idea远程部署调试tomcat
转自:http://blog.csdn.net/jane1229/article/details/52402119 远程服务器的配置: 1.在远程服务器安装jdk和tomcat 2.配置环境变量 PA ...
- 【BZOJ2832&&3874】宅男小C [模拟退火][贪心]
宅男小C Time Limit: 10 Sec Memory Limit: 256 MB[Submit][Status][Discuss] Description 众所周知,小C是个宅男,所以他的每 ...
- 【Python实例一】使用minidom读取xml文件
前言:最近刚在廖雪峰老师的网站里学习了Python的基础内容,想着循序渐进地找点实例练练手,网上看到有很多相关资料,决定针对感兴趣的内容实际编码实践一下,昨天刚好看到有关使用Python来读取XML文 ...
- es查询格式
# host://{index}/{doc_type}/ ## /car_shop/sales/index/aaa/_search
- ZigBee MAC层(下)
6. MAC功能描述 6.1 信道访问 802.15.4使用的物理无线电信道的访问机制有下面两种: - 基于竞争的访问机制: 设备使用CSMA-CA退避算法以分布式方式访问信道 - 无竞争的访问机制: ...
- iOS 动画整理
序列帧动画 曾经项目里的一段源码: 1234567891011121314 UIImageView * activityImageView = [[UIImageView alloc] init];N ...
- tarjan算法和Kosaraju算法
tarjan算法和Kosaraju算法是求有向图的强连通分量的算法: #include<iostream> #include<cstring> using namespace ...
- resin + eclipse 遇到的问题
1. 编译jsp报错: com.caucho.jsp.JspParseException: javac compiler is not available in Java(TM) SE Runtime ...