ZOJ2334

用左偏树实现优先队列最大的好处就是两个队列合并可以在Logn时间内完成 用来维护优先队列森林非常好用。

左偏树代码的核心也是两棵树的合并!

代码有些细节需要注意。

#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<cmath>
#include<vector>
#include<algorithm>
#include<queue>
using namespace std;
const int maxn=200000;
struct monkey{
int num;int group;int strong;int ls; int rs;int dist;
};
int n,m,tot;
monkey mon[maxn];
int find(int x)
{
if(mon[x].group==x||mon[x].group==0)return x;
else return mon[x].group=find(mon[x].group);
} int Top(int x)
{
return find(x);
} int Merge(int x,int y)
{
if(x==y)return x;
if(!x)return mon[y].group=y;
if(!y)return mon[x].group=x;
if(mon[x].strong<mon[y].strong)swap(x,y); mon[x].rs=Merge(mon[x].rs,y);
mon[mon[x].rs].group=x;
if(mon[mon[x].ls].dist<mon[mon[x].rs].dist)swap(mon[x].ls,mon[x].rs);
mon[x].dist=mon[mon[x].rs].dist+1;
return mon[x].group=x;
}
int Pop(int x)
{ mon[x].group=Merge(mon[x].ls,mon[x].rs);
mon[x].ls=mon[x].rs=mon[x].dist=0;
} void Insert(int x,int y)
{
Merge(find(x),y);
}
int main()
{freopen("t.txt","r",stdin);
//freopen("1.txt","w",stdout);
tot=0;
while(scanf("%d",&n)!=EOF)
{
tot++;
memset(mon,0,sizeof(mon));
for(int i=1;i<=n;i++)
{ mon[i].num=mon[i].group=i;mon[i].ls=mon[i].rs=mon[i].dist=0;
scanf("%d",&mon[i].strong);
}
scanf("%d",&m);
int a,b;
for(int i=1;i<=m;i++)
{
scanf("%d%d",&a,&b);
a=find(a);b=find(b);
if(a==b){printf("-1\n");continue;}
mon[a].strong/=2;mon[b].strong/=2;
Pop(a);
Pop(b);
Insert(find(a),a);
Insert(find(b),b); printf("%d\n",max(mon[find(a)].strong,mon[find(b)].strong));
Merge(find(a),find(b));
}
}
return 0;
}

  

ZOJ2334 Monkey King 左偏树的更多相关文章

  1. HDU1512 ZOJ2334 Monkey King 左偏树

    欢迎访问~原文出处——博客园-zhouzhendong 去博客园看该题解 题目传送门 - ZOJ2334 题目传送门 - HDU1512 题意概括 在一个森林里住着N(N<=10000)只猴子. ...

  2. hdu 1512 Monkey King 左偏树

    题目链接:HDU - 1512 Once in a forest, there lived N aggressive monkeys. At the beginning, they each does ...

  3. zoj 2334 Monkey King/左偏树+并查集

    原题链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=1389 大致题意:N只相互不认识的猴子(每只猴子有一个战斗力值) 两只 ...

  4. HDU 1512 Monkey King (左偏树+并查集)

    题意:在一个森林里住着N(N<=10000)只猴子.在一开始,他们是互不认识的.但是随着时间的推移,猴子们少不了争斗,但那只会发生在互不认识 (认识具有传递性)的两只猴子之间.争斗时,两只猴子都 ...

  5. hdu 1512 Monkey King —— 左偏树

    题目:http://acm.hdu.edu.cn/showproblem.php?pid=1512 很简单的左偏树: 但突然对 rt 的关系感到混乱,改了半天才弄对: 注意是多组数据! #includ ...

  6. hdu1512 Monkey King(左偏树 + 并查集)

    Once in a forest, there lived N aggressive monkeys. At the beginning, they each does things in its o ...

  7. LuoguP1456 Monkey King (左偏树)

    struct LeftTree{ int l,r,val,dis; }t[N]; int fa[N]; inline int Find(int x){ return x == fa[x] ? x : ...

  8. HDU 1512 Monkey King ——左偏树

    [题目分析] 也是堆+并查集. 比起BZOJ 1455 来说,只是合并的方式麻烦了一点. WA了一天才看到是多组数据. 盲人OI (- ̄▽ ̄)- Best OI. 代码自带大常数,比启发式合并都慢 [ ...

  9. HDU 1512 Monkey King(左偏堆)

    爱争吵的猴子 ★★☆ 输入文件:monkeyk.in 输出文件:monkeyk.out 简单对比 时间限制:1 s 内存限制:128 MB [问题描述] 在一个森林里,住着N只好斗的猴子.开始,他们各 ...

随机推荐

  1. Java基础(二)--this关键字及初始化

    构造器: 构造器的名称必须和类名完全相同,所以一般方法的"首字母小写"命名规则并不适合构造器 默认构造器: 也叫无参构造器,作用就是创建一个默认对象,如果你不是手写出来,编译器默认 ...

  2. ThinkPHP---thinkphp完善站内信功能

    [一]收件箱 分析 控制器:EmailController.class.php 方法:recBox(全称receive box收件箱) 模板文件:recBox.html 分步操作: 第一步:创建方法r ...

  3. 100 道 Linux 笔试题,能拿 80 分就算大神!

    本套笔试题共100题,每题1分,共100分.(参考答案在文章末尾) 1. cron 后台常驻程序 (daemon) 用于: A. 负责文件在网络中的共享 B. 管理打印子系统C. 跟踪管理系统信息和错 ...

  4. Error LNK2019: unresolved external symbol C++模板类声明与定义链接错误问题

    编译器在编译模板时,并不会生成代码,只有遇到实例化的时候才会生成代码.因此,当我们只引用模板声明文件的时候,在实例化的对象时候,模板的定义问文件是不可见的,于是出现链接错误.例如: //A.h #pr ...

  5. knockout.js--基本用法

    1,HTML元素的面向对象的赋值,数据绑定 text绑定:为p,span,div,td等加text属性值(即元素内部显示的文本), value绑定:为input添加value属性值, attr绑定:为 ...

  6. CentOS \Linux 6版本系统命令及其使用详解

    概述 常用的linux命令,分为文件管理.磁盘管理.用户管理.软件管理.系统管理等. 文件管理 ls命令 使用权限:所有使用者 使用方式:ls [-alrtAFR] [name...] 说明:显示指定 ...

  7. 设置Python解析器

    如果同时安装了多个Python,如 Python2.7 和 Python3.7 .如果某些特殊原因(比如有些框架只能在Python2.7中使用),需要修改程序在 Python2.7 下运行,即可设置P ...

  8. journals in Fluid Dynamics

    annual review of fluid mechanicsjournal of fluid mechanicsphysics of fluidjournal of flow and struct ...

  9. java属性的默认值

    String 默认null Boolean默认false int默认0 double默认0.0 类中使用自定义类定义属性默认值:null 在定义属性的时候可以指定默认值

  10. 利用tempalte.js模版引擎渲染页面,作对应的数据处理

    需要启个服务 需引入jquery.js和template.js <!DOCTYPE html> <html lang="en"> <head> ...