poj3190Stall Reservations(贪心+优先队列)
题目链接: 啊哈哈,点我点我
思路:
首先根据挤奶时间的先后顺序排序。。。然后将第一头牛加入优先队列。。然后就是加入优先队列的牛应该根据越早结束挤奶那么优先级更高,如果时间结束点相等,那么开始时间早的优先级高。。。
然后从前向后枚举。如果碰到有牛的挤奶时间的开始值大于优先队列的首部的结束值,那么说明这两头牛可以一起公用一个挤奶房。。然后从优先队列中删除这头牛。。那么这个问题就得到解决了。。。
题目:
Language: Default Stall Reservations
Oh those picky N (1 <= N <= 50,000) cows! They are so picky that each one will only be milked over some precise time interval A..B (1 <= A <= B <= 1,000,000), which includes both times A and B. Obviously, FJ must create a reservation system to determine which stall each cow can be assigned for her milking time. Of course, no cow will share such a private moment with other cows. Help FJ by determining:
Line 1: A single integer, N Lines 2..N+1: Line i+1 describes cow i's milking interval with two space-separated integers. Output Line 1: The minimum number of stalls the barn must have. Lines 2..N+1: Line i+1 describes the stall to which cow i will be assigned for her milking period. Sample Input 5 1 10 2 4 3 6 5 8 4 7 Sample Output 4 1 2 3 2 4 Hint Explanation of the sample: Here's a graphical schedule for this output: Time123456789 10Stall 1 c1>>>>>>>>>>>>>>>>>>>>>>>>>>>Stall 2 .. c2>>>>>> c4>>>>>>>>> .. ..Stall 3 .. .. c3>>>>>>>>> .. .. .. ..Stall 4 .. .. .. c5>>>>>>>>> .. .. .. Other outputs using the same number of stalls are possible. 【poj3190Stall Reservations(贪心+优先队列)】Source USACO 2006 February Silver |
代码为:
#include
#include
#include
#include
using namespace std;
const int maxn=50000+10;
int order[maxn];
struct Node
{
int st,en,pos;
friend bool operator<(Node a,Node b)
{
if(a.en==b.en)
return a.stb.en;
}
}node[maxn];
bool cmp(Node a,Node b)
{
if(a.st==b.st)
return a.enQ;
int main()
{
int n,ans;
while(~scanf("%d",&n))
{
for(int i=1;
i<=n;
i++)
{
scanf("%d%d",&node[i].st,&node[i].en);
node[i].pos=i;
}
sort(node+1,node+1+n,cmp);
ans=1;
Q.push(node[1]);
order[node[1].pos]=1;
for(int i=2;
i<=n;
i++)
{
if(!Q.empty()&&Q.top().en
推荐阅读
- (三)|(三) 贪心算法
- 刷题记录|【蓝桥必胜】试题 算法训练 kAc给糖果你吃-贪心排序
- #|算法设计与分析(Java实现)——贪心算法(集合覆盖案例)
- 贪心算法(2)(金条切割问题、点灯问题、IPO问题)
- Codeforces22|Codeforces22 D. Segments(贪心)
- 题库-CF|【Codeforces Round 263 (Div 2)C】【贪心 哈弗曼思维】Appleman and Toastman 每个非1size子树延展为2子树的最大权
- CodeForces-1282B2 K for the Price of One (Hard Version)(DP || 前缀和+贪心)
- 贪心算法刷题
- ZOJ-3447---Doraemon's Number Game (贪心+大数)
- CodeForces 567A Lineland Mail 贪心