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表示喜羊羊和灰 ...
随机推荐
- Network of Schools---poj1236(强连通分量)
题目链接 题意:学校有一些单向网络,现在需要传一些文件 求:1,求最少需要向几个学校分发文件才能让每个学校都收到, 2,需要添加几条网络才能从任意一个学校分发都可以传遍所有学校. 解题思路(参考大神的 ...
- Ubuntu操作异常汇总
1.使用Ubuntu的apt-get安装软件时出现以下错误: Reading package lists... Done Building dependency tree... Done Packag ...
- centos MySQL主从配置 ntsysv chkconfig setup命令 配置MySQL 主从 子shell MySQL备份 kill命令 pid文件 discuz!论坛数据库读写分离 双主搭建 mysql.history 第二十九节课
centos MySQL主从配置 ntsysv chkconfig setup命令 配置MySQL 主从 子shell MySQL备份 kill命令 pid文件 discuz!论坛数 ...
- go-003-基础语法
1.行分隔符 一行代表一个语句结束. 如果一行多个,使用“;”分割,不推荐使用,建议使用默认一行一个语句 2.标识符 标识符用来命名变量.类型等程序实体.一个标识符实际上就是一个或是多个字母(A~Z和 ...
- python模块之xlrd(excl调用模块)
一.安装xlrd模块 到python官网下载http://pypi.python.org/pypi/xlrd模块安装,前提是已经安装了python 环境. 二.使用介绍 1.导入模块 import x ...
- 使用Ajax验证用户是否已存在
在服务器端使用Servlet,里面在集合里存了几个字符串,没有对数据库操作. 前台input页面和Ajax验证: <%@ page language="java" conte ...
- linux更改文件或目录的属主和属组
chown 1.效用 更改一个或者多个文件或者目录的属主以及属组,使用职权范围是超等用户 2.格局 chown [选项] 用户或者组 文件 3.首要参量 --dereference:受影响 ...
- Redis 监控方案
一.概述 近些天,遇到Redis监控的应用场景,从网上搜罗了一些文章,做了整理. 二.工具列表 2.1 redis-faina 见参考文章1 2.2 redis-live 见参考文章1 2.3 red ...
- SQL :模糊查询,转义字符
1. 查询table表name列包含 '_BCE' 的记录 select * from table where name like '_BCE%' ABCEDF _BCEFG _BCEDF 3 row ...
- Python3.x:os.chdir(改变当前路径方法)介绍
Python3.x:os.chdir(改变当前路径方法)介绍 1,os.chdir() import os os.chdir(r'C:\python36\test_chdir') 说明:chdir() ...