hdu3031
题解:
左偏树模板题目
每一次合并,删除最大,修改最大
都是基本操作
代码:
#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的更多相关文章
- HDU3031 To Be Or Not To Be 左偏树 可并堆
欢迎访问~原文出处——博客园-zhouzhendong 去博客园看该题解 题目传送门 - HDU3031 题意概括 喜羊羊和灰太狼要比赛. 有R次比赛. 对于每次比赛,首先输入n,m,n表示喜羊羊和灰 ...
随机推荐
- 转!!git如何撤销上一次commit(或已push)
原博文地址 : https://www.cnblogs.com/lyy-2016/p/6509707.html git如何撤销上一次commit操作 1.第一种情况:还没有push,只是在本地comm ...
- PyCharm安装与配置,python的Hello World
1. 访问https://www.jetbrains.com/zh/pycharm/download/download-thanks.html, 下载pycharm 安 装包,点击安装. 2. 用记事 ...
- 【Python】接口自动化测试-Fidder的使用(未完待续……)
一.fidder一些一定需要掌握的知识. 1.工具简介 2.清屏操作(1中提到了,这里再着重说明下): 3.get和post请求参数相关: 4.会话框(Fidder左侧区域内容解析): 5.Reque ...
- 使用Atom预览markdown
1.打开任意.md文件(markdown源文件)2.windows : ctrl + shift + pmac : command + shift + p这条命令跟Sublime Text是一样的,打 ...
- Django Rest Framework(3)-----APIView与Viewsets
REST framework提供了一个APIView类,它是Django的View类的子类. REST framework主要的几种view以及他们之间的关系: mixins 到目前为止,我们使用的创 ...
- uva The Tower of Babylon[LIS][dp]
转自:https://mp.weixin.qq.com/s/oZVj8lxJH6ZqL4sGCXuxMw The Tower of Babylon(巴比伦塔) Perhaps you have hea ...
- cocos代码研究(12)UI之Widget学习笔记
理论基础 Widget类,所有UI控件的基类. 这类继承自ProtectedNode和LayoutParameterProtocol. 如果你想实现自己的UI控件,你应该继承这个类. 被 VideoP ...
- Java 和 Python 解析动态 key 的 JSON 数据
一.概述 解析JSON过程中,什么情况都可能遇到.遇到特殊的情况,不会怎么办?肯定不是设计的问题,一定是你的姿势不对. 有这样一种JSON需要解析: { "b3444533f6544&quo ...
- CodeForces - 366C Dima and Salad (01背包)
题意:n件东西,有属性a和属性b.要选取若干件东西,使得\(\frac{\sum a_j}{\sum b_j} = k\).在这个条件下,问\(\sum a_j\)最大是多少. 分析:可以将其转化为0 ...
- Flex开发框架cairngorm入门实例
Cairngorm是flex开发的mvc框架,现在在 adobe旗下.它架构和eclipse插件开发gef架构很相似,具体工作原理如下: 该框架就是一个Cairngorm.swc文件,大家可以到Cai ...