【bzoj4082】[Wf2014]Surveillance 倍增
2018-01-15 08:48
323 查看
Description
给你一个长度为len的环,以及n个区间,要你选择尽量少的区间,使得它们完全覆盖整个环。问最少要多少个区间。
Input
输入数据的第一行是两个整数len和n,代表环的长度以及区间个数。之后n行描述的是n个区间,每个区间分别用一对数字(a,b)表示,若a≤b则表示这个区间覆盖的是[a,b]部分,否则表示这个区间覆盖的是除掉[a+1,b-1]以外的其他部分。
Output
输出只有一行,一个整数,代表覆盖整个环所需要的最少区间个数。
Sample Input
100 7
1 50
50 70
70 90
90 40
20 60
60 80
80 20
Sample Output
3
题解
%PoPoQQQ
http://blog.csdn.net/popoqqq/article/details/45916231
代码
给你一个长度为len的环,以及n个区间,要你选择尽量少的区间,使得它们完全覆盖整个环。问最少要多少个区间。
Input
输入数据的第一行是两个整数len和n,代表环的长度以及区间个数。之后n行描述的是n个区间,每个区间分别用一对数字(a,b)表示,若a≤b则表示这个区间覆盖的是[a,b]部分,否则表示这个区间覆盖的是除掉[a+1,b-1]以外的其他部分。
Output
输出只有一行,一个整数,代表覆盖整个环所需要的最少区间个数。
Sample Input
100 7
1 50
50 70
70 90
90 40
20 60
60 80
80 20
Sample Output
3
题解
%PoPoQQQ
http://blog.csdn.net/popoqqq/article/details/45916231
代码
#include<cstdio> #include<iostream> #include<cstring> #include<algorithm> #include<cmath> #include<vector> #define ll long long #define mod 10000007 using namespace std; inline int read() { int x=0,f=1;char ch=getchar(); while(ch<'0'||ch>'9'){if (ch=='-') f=-1;ch=getchar();} while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();} return x*f; } struct node{int l,r;}a[1000005]; int ans=1000000000,len,n; int mn[1000005],f[1000005][21]; bool cmp(node a,node b){return a.r<b.r;} int main() { len=read();n=read(); for (int i=1;i<=n;i++) { a[i].l=read();a[i].r=read(); if (a[i].r<a[i].l) a[i].r+=len; } sort(a+1,a+n+1,cmp); mn =a .l;for (int i= 4000 n-1;i;i--) mn[i]=min(a[i].l,mn[i+1]); for (int i=1,j=1;i<=n;i++) { while (j<n&&mn[j+1]-1<=a[i].r) j++; if (i!=j)f[i][0]=j; } for (int k=1;k<=20;k++) for (int i=1;i<=n;i++) f[i][k]=f[f[i][k-1]][k-1]; for (int i=1;i<=n;i++) { int sum=1,now=i; for (int j=20;j>=0;j--) if (f[now][j]&&a[f[now][j]].r<a[i].l+len) now=f[now][j],sum+=1<<j; if (a[now].r<a[i].l+len-1&&f[now][0]) now=f[now][0],sum++; if (a[now].r>=a[i].l+len-1) ans=min(ans,sum); } if (ans==1000000000) printf("impossible");else cout<<ans; return 0; }
相关文章推荐
- bzoj4082 [Wf2014]Surveillance 倍增
- bzoj 4082: [Wf2014]Surveillance 倍增
- BZOJ 4082 Wf2014 Surveillance 树上倍增
- [Hash] BZOJ 4076 [Wf2014]Maze Reduction
- 【BZOJ4080】【WF2014】Sensor Network [随机化]
- 【BZOJ3670】【NOI2014】动物园 [KMP][倍增]
- [HEOI2014][BZOJ3611] 大工程|虚树|树型dp|dfs序|树上倍增LCA
- BZOJ 4080 Wf2014 Sensor Network 随机化
- BZOJ 4144: [AMPPZ2014]Petrol 最短路+最小生成树+倍增
- bzoj 4080: [Wf2014]Sensor Network【瞎搞+随机化】
- 【BZOJ4080】[Wf2014]Sensor Network 随机化
- bzoj 4078: [Wf2014]Metal Processing Plant【二分+2-SAT+枚举+并查集】
- BZOJ4078 : [Wf2014]Metal Processing Plant
- bzoj 4144 [AMPPZ2014]Petrol 最短路+最小生成树+倍增
- BZOJ4083 : [Wf2014]Wire Crossing
- BZOJ 4079 [Wf2014] Pachinko
- BZOJ4081 [WF2014]Skiing
- BZOJ 4080 [Wf2014]Sensor Network 随机化
- BZOJ 4080: [Wf2014]Sensor Network 随机化求最大团
- [Bzoj3676][Apio2014]回文串(后缀自动机)(parent树)(倍增)