题解:

左偏树模板题目

每一次合并,删除最大,修改最大

都是基本操作

代码:

#include<cstdio>
#include<cmath>
#include<algorithm>
#include<cstring>
using namespace std;
const int M=,N=;
int T,n,m,p[M],root[M],v1=,v0=,c[N][],dist[N],val[N],cnt;
void makeheap(int x,int v)
{
c[x][]=c[x][]=dist[x]=;
val[x]=v;
}
int merge(int x,int y)
{
if (!x||!y)return x+y;
if (val[x]<val[y])swap(x,y);
c[x][]=merge(c[x][],y);
if (dist[c[x][]]>dist[c[x][]])swap(c[x][],c[x][]);
dist[x]=dist[c[x][]]+;
return x;
}
void ps(int &x){x=merge(c[x][],c[x][]);}
void change(int &x,int v)
{
int k=merge(c[x][],c[x][]);
makeheap(x,v);
x=merge(x,k);
}
int main()
{
scanf("%d",&T);
while (T--)
{
cnt=;
scanf("%d%d",&n,&m);
for (int i=;i<=m;i++)scanf("%d",&p[i]);
memset(root,,sizeof root);
for (int i=;i<=m;i++)
for (int j=,x;j<=p[i];j++)
{
scanf("%d",&x);
makeheap(++cnt,x);
root[i]=merge(root[i],cnt);
}
int x[],rt[];
memset(rt,,sizeof rt);
memset(x,,sizeof x);
for (int i=;i<=n;i++)
{
char s[];
int a;
scanf("%s",&s);
if (s[]=='T')
{
scanf("%d",&a);
rt[i&]=merge(rt[i&],root[a]);
x[i&]+=p[a];
}
if (s[]=='C')
{
if (val[rt[]]==val[rt[]])continue;
if (val[rt[]]>val[rt[]])
{
x[]+=x[];
x[]=;
rt[]=merge(rt[],rt[]);
rt[]=;
}
else
{
x[]+=x[];
x[]=;
rt[]=merge(rt[],rt[]);
rt[]=;
}
}
if (s[]=='L')
{
ps(rt[i&]);
x[i&]--;
}
if (s[]=='A')
{
scanf("%d",&a);
change(rt[i&],val[rt[i&]]+a);
}
if (s[]=='E')
{
scanf("%d",&a);
change(rt[i&],a);
}
}
printf("%d:%d\n",x[],x[]);
if (x[]>=x[])v1++;
else v0++;
}
if (v1<v0)puts("I will be back!!");
else puts("Hahaha...I win!!");
return ;
}

hdu3031的更多相关文章

  1. HDU3031 To Be Or Not To Be 左偏树 可并堆

    欢迎访问~原文出处——博客园-zhouzhendong 去博客园看该题解 题目传送门 - HDU3031 题意概括 喜羊羊和灰太狼要比赛. 有R次比赛. 对于每次比赛,首先输入n,m,n表示喜羊羊和灰 ...

随机推荐

  1. Python开发【模块】:Requests(一)

    Requests模块 1.模块说明 Requests 是使用 Apache2 Licensed 许可证的 HTTP 库.用 Python 编写,真正的为人类着想. Python 标准库中的 urlli ...

  2. HTTP的常见状态码

    一.1xx(临时响应) 表示临时响应并需要请求者继续执行操作的状态码. 100(继续) 请求者应当继续提出请求.服务器返回此代码表示已收到请求的第一部分,正在等待其余部分. 101(切换协议) 请求者 ...

  3. (2.4)DDL增强功能-数据汇总grouping、rollup、cube

    参考:https://www.cnblogs.com/nikyxxx/archive/2012/11/27/2791001.html 1.rollup (1)rollup在group by 子句中使用 ...

  4. 002-spring cache 基于声明式注解的缓存-02-CachePut、CacheEvict、Caching、CacheConfig、EnableCaching、自定义

    1.2.CachePut annotation 在支持Spring Cache的环境下,对于使用@Cacheable标注的方法,Spring在每次执行前都会检查Cache中是否存在相同key的缓存元素 ...

  5. AE Scene开发中的观察者模式

    AE SceneGraph中的观察者模式 注意SceneControl不是观察者,它只是一个SceneGraph的拥有者:SceneViewer才是观察者,SceneGraph是被观察对象,同时观察者 ...

  6. C++循环的内存释放问题?

    针对http://wenku.baidu.com/view/56d732ee856a561252d36ff2.html的内容测试一下. #include "A.h" #includ ...

  7. hive两大表关联优化试验

    呼叫结果(call_result)与销售历史(sale_history)的join优化: CALL_RESULT: 32亿条/444G SALE_HISTORY:17亿条/439G 原逻辑 Map: ...

  8. wordpress的安装及使用

    1.如何查看别人的wordpress站点所有的模板 2.如何使用自定义的模板

  9. testng多线程并行执行测试

    testng多线程并行执行测试 testng多线程并行执行测试 并行(多线程)技术在软件术语里被定义为软件.操作系统或者程序可以并行地执行另外一段程序中多个部分或者子组件的能力.TestNG允许我们以 ...

  10. 田忌赛马Java解答

    你一定听过田忌赛马的故事吧?     如果3匹马变成1000匹,齐王仍然让他的马按从优到劣的顺序出赛,田忌可以按任意顺序选择他的赛马出赛.赢一局,田忌可以得到200两银子,输一局,田忌就要输掉200两 ...