您的位置:首页 > 其它

hdu5437 优先队列 长春网赛

2015-09-16 10:28 357 查看
优先队列做,然后遍历人数。

#include <queue>
#include <stdio.h>
#include <string.h>
#define maxn 150010
using namespace std;
struct node
{
int id;
int val;
friend bool operator < (node a ,node b){
if(a.val==b.val)
return a.id > b.id;
return a.val < b.val;
}
}a[maxn];
priority_queue<node>q;
int n,x[maxn],ans[maxn];
char name[maxn][210];
int main()
{
int i,j,t,m,p;
scanf("%d", &t);
while(t--)
{
scanf("%d %d %d", &n, &m, &p);
memset(x,0,sizeof(x));
for(i=1; i<=n; i++)
{
scanf("%s %d", name[i], &a[i].val);
a[i].id=i;
ans[i]=0;
}
for(i=0; i<m; i++)
{
int fx,fy;
scanf("%d %d", &fx, &fy);
x[fx]=fy;
}
int cou=1;
for(i=1;i<=n;i++)
{
q.push(a[i]);
for(j=0;j<x[i]&&!q.empty();j++)
{
node tt=q.top();
q.pop();
ans[cou++]=tt.id;
}
}
while(!q.empty())
{
node tt=q.top();
q.pop();
ans[cou++]=tt.id;
}
int flag=0;
while(p--)
{
int fp;
scanf("%d",&fp);
if(!flag)
printf("%s",name[ans[fp]]);
else printf(" %s",name[ans[fp]]);
flag=1;
}
printf("\n");
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: