题解:

左偏树模板题目

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

都是基本操作

代码:

#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. Network of Schools---poj1236(强连通分量)

    题目链接 题意:学校有一些单向网络,现在需要传一些文件 求:1,求最少需要向几个学校分发文件才能让每个学校都收到, 2,需要添加几条网络才能从任意一个学校分发都可以传遍所有学校. 解题思路(参考大神的 ...

  2. Ubuntu操作异常汇总

    1.使用Ubuntu的apt-get安装软件时出现以下错误: Reading package lists... Done Building dependency tree... Done Packag ...

  3. centos MySQL主从配置 ntsysv chkconfig setup命令 配置MySQL 主从 子shell MySQL备份 kill命令 pid文件 discuz!论坛数据库读写分离 双主搭建 mysql.history 第二十九节课

    centos  MySQL主从配置 ntsysv   chkconfig  setup命令  配置MySQL 主从 子shell  MySQL备份  kill命令  pid文件  discuz!论坛数 ...

  4. go-003-基础语法

    1.行分隔符 一行代表一个语句结束. 如果一行多个,使用“;”分割,不推荐使用,建议使用默认一行一个语句 2.标识符 标识符用来命名变量.类型等程序实体.一个标识符实际上就是一个或是多个字母(A~Z和 ...

  5. python模块之xlrd(excl调用模块)

    一.安装xlrd模块 到python官网下载http://pypi.python.org/pypi/xlrd模块安装,前提是已经安装了python 环境. 二.使用介绍 1.导入模块 import x ...

  6. 使用Ajax验证用户是否已存在

    在服务器端使用Servlet,里面在集合里存了几个字符串,没有对数据库操作. 前台input页面和Ajax验证: <%@ page language="java" conte ...

  7. linux更改文件或目录的属主和属组

    chown  1.效用  更改一个或者多个文件或者目录的属主以及属组,使用职权范围是超等用户  2.格局  chown [选项] 用户或者组 文件  3.首要参量  --dereference:受影响 ...

  8. Redis 监控方案

    一.概述 近些天,遇到Redis监控的应用场景,从网上搜罗了一些文章,做了整理. 二.工具列表 2.1 redis-faina 见参考文章1 2.2 redis-live 见参考文章1 2.3 red ...

  9. SQL :模糊查询,转义字符

    1. 查询table表name列包含 '_BCE' 的记录 select * from table where name like '_BCE%' ABCEDF _BCEFG _BCEDF 3 row ...

  10. Python3.x:os.chdir(改变当前路径方法)介绍

    Python3.x:os.chdir(改变当前路径方法)介绍 1,os.chdir() import os os.chdir(r'C:\python36\test_chdir') 说明:chdir() ...