HDU1434(终于用优先队列a了一题。。。了解度+1)

#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
#include<string.h>
#include<queue>
#include<vector>
#define maxint 999999999
#define MAXN 10005
#define ll long long
using namespace std;

int n,m,k,flag,num;
ll sum;
int Mark[MAXN],st[MAXN],vis[MAXN];

struct Q{
    char name[25];
    int val;
};

bool operator <(const Q &x,const Q &y){
    int Min=min(strlen(x.name),strlen(y.name));
    if(x.val!=y.val)
        return  x.val>y.val;
    for(int i=0;i<Min;i++){
        if(x.name[i]!=y.name[i])
            return x.name[i]<y.name[i];
    }
}

int main()
{
    int l,a,b,c,d;
    char str[20];

    while(scanf("%d %d",&n,&m)!=EOF){
        Q z;
        priority_queue<Q>q[MAXN];
        for(int i=1;i<=n;i++){
            scanf("%d",&l);
            for(int j=1;j<=l;j++){
                scanf("%s %d",z.name,&z.val);
                q[i].push(z);
            }
        }
        for(int i=1;i<=m;i++){
            scanf("%s",str);
            if(strlen(str)==4){
             scanf("%d %d",&a,&b);
             while(!q[b].empty()){
                 q[a].push(q[b].top());
                 q[b].pop();
             }
            }
            else if(strlen(str)==6){
                scanf("%d",&c);
                printf("%s\n",q[c].top().name);
                q[c].pop();
            }
            else if(strlen(str)==5){
                Q w;
                scanf("%d",&d);
                scanf("%s %d",w.name,&w.val);
                q[d].push(w);
            }
        }
        for(int i=1;i<n;i++){
            while(!q[i].empty()){
                q[i].pop();
            }
        }
    }return 0;
}
时间: 2024-11-10 04:12:06

HDU1434(终于用优先队列a了一题。。。了解度+1)的相关文章

优先队列问题(此题来源哈尔滨理工大学VJ)

---恢复内容开始--- Description 小z身处在一个迷宫中,小z每分钟可以走到上下左右四个方向的相邻格之一.迷宫中有一些墙和障碍物.同时迷宫中也有一些怪兽,当小z碰到任意一个怪兽时,小z需要将怪兽消灭掉才可以离开此方格.但消灭怪兽会花费一定的时间.现在小z想知道走出迷宫需要花费的最少时间. Input 输入第一行为组数T(T<=10). 对于每组数据第一行为两个整数R和C(1<=R,C<=200).以下R行每行有C个字符,即迷宫地图. 其中"#"代表墙和障

HDU The kth great number 优先队列、平衡树模板题(SBT)

The kth great number Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65768/65768 K (Java/Others) [Problem Description] Xiao  Ming  and  Xiao  Bao  are  playing  a  simple  Numbers  game.  In  a  round  Xiao  Ming  can choose  to  write  down 

【二分图匹配入门专题1】I - Hiding Gold light oj 1152【二分图匹配】-------------------我是终于不那么水的水题分割线------------------------

You are given a 2D board where in some cells there are gold. You want to fill the board with 2 x 1 dominoes such that all gold are covered. You may use the dominoes vertically or horizontally and the dominoes may overlap. All you have to do is to cov

HDU 1058 优先队列or堆

本来应当是一道优先队列或者堆的题 因为每个数都应该是已经得到的数*2 *3 *5 *7而得到的 但是 2*7 大于 3*2 这就必须保证每次取得都是没有拿过的最小的数 但是它主动降低难度在样例里卖了个萌 n的范围是1~5842 而第5842在样例里给出了..所以我们在取出一个数 求出它的*2 *3 *5 *7的时候做一下判断 如果大于最后一位就直接break 因为相乘的顺序在 可以省一点时间 在判断某个数是否出现过的时候 开不出那么大的vis数组 所以直接for循环从ans数组中寻找 所幸没有超

HDU 1242 Rescue(优先队列+bfs)

题目地址:HDU 1242 这个题相比于普通的bfs有个特殊的地方,经过士兵时会额外消耗时间,也就是说此时最先搜到的时候不一定是用时最短的了.需要全部搜一遍才可以.这时候优先队列的好处就显现出来了.利用优先队列,可以让队列中的元素按时间排序,让先出来的总是时间短的,这样的话,最先搜到的一定是时间短的,就不用全部搜一遍了.PS:我是为了学优先队列做的这题..不是为了这题而现学的优先队列.. 代码如下: #include <iostream> #include <stdio.h> #i

几个相似的DP题

HDU1398 题意:把一个整数分拆成1.4.9.16.--.256.289(注意:只到289)这17个完全平方数的和,有几种方法. 解法不用说自然是DP,因为搜索显然超时. (这样的题我一般不敢开int,怕爆--) 1 #include <cstdio> 2 #include <cstring> 3 #include <iostream> 4 #include <algorithm> 5 #include <functional> 6 7 us

(转载)关于gcd的8题

发现其实有关gcd的题目还是挺多的,这里根据做题顺序写出8题. [bzoj2818: Gcd] gcd(x,y)=质数, 1<=x,y<=n的对数 做这题的时候,懂得了一个非常重要的转化:求(x, y) = k, 1 <= x, y <= n的对数等于求(x, y) = 1, 1 <= x, y <= n/k的对数!所以,枚举每个质数p(线性筛素数的方法见:线性时间内筛素数和欧拉函数),然后求(x, y) = 1, 1 <= x, y <= n/p的个数.

UVALive 4953 Wormly--【提醒自己看题要仔细】

有一条虫要过桥,桥有断的木板和好的木板.虫有L条腿B个身体,桥长N.01串表示桥的好坏.输出最少操作次数. 一开始虫的身体在最左B桥上,腿在最左L桥上,最后要到达最右B以及最右L... 操作有2种:①所有身体前进一步②某一条腿前进任意步....整个过程要保证每个身体下只能有一条腿....还有就是任意一条腿不能overtake(追上.赶上)其他腿.. 输入保证起点终点的桥都是完好的... 鉴于中文水平跟英语水平都不高...题意请自行YY脑补... 看题不仔细....再次坑队友....大家好,我是坑

第十五周oj刷题——Problem I: C++ 习题 比较大小-类模板

Description 声明一个类模板,利用它分别实现两个整数.浮点数和字符的比较,求出大数和小数.说明:在类模板外定义各成员函数. Input 输入两个整数.两个浮点数和两个字符 Output 从大到小输出两个整数.两个浮点数和两个字符 Sample Input 3 7 45.78 93.6 a A Sample Output 7 3 93.60 45.78 a A   /* All rights reserved. * 文件名称:test.cpp * 作者:陈丹妮 * 完成日期:2015年