bzoj 3893: [Usaco2014 Dec]Cow Jog 并查集+单调队列
来源:互联网 发布:中文翻译软件哪个好 编辑:程序博客网 时间:2024/06/05 08:47
题意
在一条无限长的跑道上有N头牛,每头牛有自己的初始位置及奔跑的速度。牛之间不能互相穿透。当一只牛追上另一只牛时,它不得不慢下来,成为一个群体。求T分钟后一共有几个群体。
n<=100000
分析
我们把每头牛跑过的区间求出来。显然若两头牛会合并当且仅当它们的区间满足包含关系。
那么我们就可以把区间按左端点排序后从前往后扫,然后维护一个右端点单调递增的单调队列。
每碰到一个区间,就把单调队列里面所有右端点比它大的区间与它合并即可。
复杂度O(nlogn)
貌似还有更简洁的O(n)做法。
代码
#include<iostream>#include<cstdio>#include<cstdlib>#include<cstring>#include<algorithm>using namespace std;typedef long long LL;const int N=100005;int n,t,f[N],q[N];pair<LL,LL> a[N];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;}int find(int x){ if (f[x]==x) return x; else return f[x]=find(f[x]);}int main(){ n=read();t=read(); for (int i=1;i<=n;i++) { int x=read(),y=read(); a[i]=make_pair((LL)x,(LL)x+(LL)t*y); f[i]=i; } sort(a+1,a+n+1); int top=0; for (int i=1;i<=n;i++) { LL mx=a[i].second; while (top&&a[q[top]].second>=a[i].second) { int x=find(q[top]),y=find(i); if (x!=y) f[x]=y; top--; } q[++top]=i; } int ans=0; for (int i=1;i<=n;i++) if (f[i]==i) ans++; printf("%d",ans); return 0;}
阅读全文
0 0
- bzoj 3893: [Usaco2014 Dec]Cow Jog 并查集+单调队列
- BZOJ 3893 Usaco2014 Dec Cow Jog 模拟
- BZOJ 3893 [Usaco2014 Dec]Cow Jog
- BZOJ 3893 [Usaco2014 Dec]Cow Jog
- bzoj 3893 [Usaco2014 Dec]Cow Jog 模拟
- bzoj 3826: [Usaco2014 Dec]Cow Jog LIS
- 洛谷 3893: [Usaco2014 Dec]Cow Jog
- bzoj3893【Usaco2014 Dec】Cow Jog
- bzoj3893: [Usaco2014 Dec]Cow Jog
- 【BZOJ3893】【Usaco2014 Dec】Cow Jog 乱搞
- 【BZOJ】3430 [Usaco2014 Jan]Ski Course Rating 并查集
- bzoj 3825: [Usaco2014 Dec]Marathon
- 【BZOJ3893】【Usaco2014 Dec】金组 Runing Cow
- BZOJ 3892 Usaco2014 Dec Marathon DP
- BZOJ 3891 Usaco2014 Dec Piggy Back BFS
- BZOJ 3892 [Usaco2014 Dec]Marathon 动态规划
- BZOJ 3891 [Usaco2014 Dec]Piggy Back BFS
- bzoj 3892: [Usaco2014 Dec]Marathon 动态规划
- 习题四
- maven聚合工程的创建和聚合工程的打包
- 对于给定的数组,统计出其中最多的元素的值
- 集合框架专题2—AbstractList
- 常见算法基础题思路简析(六)-字符串篇
- bzoj 3893: [Usaco2014 Dec]Cow Jog 并查集+单调队列
- TensorFlow学习日记8
- Head First Java 总结
- Java Development kit 9
- 杂谈---------- OneNote代码高亮---NoteHighlight 2013
- python中如何调用.py文件
- Canvas的drawText方法详解
- 关于数组作为局部变量超时
- 虚拟机的OutOfMemoryError异常