题目链接:传送门
没做过优先队列,也没有用过重载运算符,还是不太懂是怎么排的。
优先队列的运用(他人的博客):传送门
我的代码:
#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;
}