hdu1434 优先队列

题目链接:传送门

没做过优先队列,也没有用过重载运算符,还是不太懂是怎么排的。

优先队列的运用(他人的博客):传送门

我的代码:

#include <iostream>
#include <cstdio>
#include<cstring>
#include<queue>
using namespace std;
struct node
{
    char name[30];
    int rp;
    friend bool operator <(node a,node b)
    {
        if(a.rp==b.rp)
            return strcmp(a.name,b.name)<0;
        return a.rp>b.rp;
    }
};
int main()
{
    int n,m,i,t,b,p,c;
    node temp;
    char str[30];

    while(~scanf("%d %d",&n,&m)&&n)
    {
        priority_queue<node>q[10100];
        for(i=1; i<=n; i++)
        {
            scanf("%d",&p);
            while(p--)
            {
                scanf("%s %d",temp.name,&temp.rp);
                q[i].push(temp);
            }

        }
        while(m--)
        {
            scanf("%s",str);
            if(strcmp(str,"GETOUT")==0)
            {
                scanf("%d",&b);
                temp=q[b].top();
                if(!q[b].empty())
                {
                    printf("%s\n",temp.name);
                    q[b].pop();
                }
            }
         else if(!strcmp(str,"JOIN"))
            {
                scanf("%d %d",&b,&c);
                while(!q[c].empty())
                {
                    temp=q[c].top();
                    q[b].push(temp);
                    q[c].pop();
                }
            }
            else
            {
                scanf("%d %s %d",&b,temp.name,&temp.rp);
                q[b].push(temp);

            }

        }
    }
    return 0;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值