poj 2431 Expedition 优先队列 大顶堆

来源:互联网 发布:淘宝客qq群如何拉人 编辑:程序博客网 时间:2024/05/22 20:21

这题书上说要优先队列,然后看了一下,试着敲了一下,一敲就是这么久



#include<iostream>#include<algorithm>#include<queue>using namespace std;int b[100020];int c[100020];struct point{    int d;    int c;    friend bool operator<(point a,point b)   //重载< 友元函数,而且只能重载<符号     {        return a.c<b.c; //大的值在堆上面,用<,否则用>;    }}p[100010];bool cmp(point a,point b){    return a.d<b.d;}priority_queue<point>pq;int main(){    int n;    cin>>n;    int i,j;    int x,y;    for(i=1;i<=n;i++)    {        cin>>p[i].d>>p[i].c;    }    cin>>x>>y;    for(i=1;i<=n;i++)    {        p[i].d=x-p[i].d;    }    p[0].d=x;    p[0].c=0;    sort(p,p+n+1,cmp);    for(i=n;i;i--)    {        p[i].d=p[i].d-p[i-1].d;    }    int pos=0;    int ans=0;    int tank=y;    for(i=0;i<=n;i++)    {        if(tank<p[i].d)        {             while(tank<p[i].d)            {                if(pq.size()==0)                {                    cout<<"-1"<<endl;                    return 0;                }                tank+=pq.top().c;                ans++;                pq.pop();            }        }        tank-=p[i].d;        pq.push(p[i]);    }    cout<<ans<<endl;}


0 0
原创粉丝点击