HDU 1512 Monkey King
左偏树。我是ziliuziliu,我是最强的
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
#define maxn 100500
using namespace std;
int root[maxn],ls[maxn],rs[maxn],val[maxn],father[maxn],n,m;
int x,y,dis[maxn];
int find(int x)
{
if (x!=father[x])
father[x]=find(father[x]);
return father[x];
}
int merge(int x,int y)
{
if (x==) return y;
else if (y==) return x;
if (val[x]<val[y]) swap(x,y);
rs[x]=merge(rs[x],y);
father[rs[x]]=x;
if (dis[ls[x]]<dis[rs[x]]) swap(ls[x],rs[x]);
if (rs[x]==) dis[x]=;
else dis[x]=dis[rs[x]]+;
return x;
}
int pop(int x)
{
father[x]=x;
father[ls[x]]=ls[x];
father[rs[x]]=rs[x];
int regis=merge(ls[x],rs[x]);
ls[x]=rs[x]=dis[x]=;
return regis;
}
int main()
{
while (scanf("%d",&n)!=EOF)
{
memset(ls,,sizeof(ls));
memset(rs,,sizeof(rs));
dis[]=-;
for (int i=;i<=n;i++)
{
scanf("%d",&val[i]);
father[i]=i;
root[i]=i;
}
scanf("%d",&m);
for (int i=;i<=m;i++)
{
scanf("%d%d",&x,&y);
int pa,pb;
pa=find(x),pb=find(y);
if (pa==pb) printf("-1\n");
else
{
val[pa]/=;val[pb]/=;
int nn1,nn2;
nn1=pop(pa);nn2=pop(pb);
nn1=merge(nn1,pa);
nn1=merge(nn1,pb);
nn1=merge(nn1,nn2);
printf("%d\n",val[find(pa)]);
}
}
}
return ;
}
HDU 1512 Monkey King的更多相关文章
- hdu 1512 Monkey King 左偏树
题目链接:HDU - 1512 Once in a forest, there lived N aggressive monkeys. At the beginning, they each does ...
- 数据结构(左偏树):HDU 1512 Monkey King
Monkey King Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Tota ...
- HDU 1512 Monkey King(左偏树+并查集)
[题目链接] http://acm.hdu.edu.cn/showproblem.php?pid=1512 [题目大意] 现在有 一群互不认识的猴子,每个猴子有一个能力值,每次选择两个猴子,挑出他们所 ...
- HDU 1512 Monkey King(左偏树模板题)
http://acm.hdu.edu.cn/showproblem.php?pid=1512 题意: 有n只猴子,每只猴子一开始有个力量值,并且互相不认识,现有每次有两只猴子要决斗,如果认识,就不打了 ...
- hdu 1512 Monkey King —— 左偏树
题目:http://acm.hdu.edu.cn/showproblem.php?pid=1512 很简单的左偏树: 但突然对 rt 的关系感到混乱,改了半天才弄对: 注意是多组数据! #includ ...
- HDU 1512 Monkey King(左偏树)
Description Once in a forest, there lived N aggressive monkeys. At the beginning, they each does thi ...
- HDU 1512 Monkey King ——左偏树
[题目分析] 也是堆+并查集. 比起BZOJ 1455 来说,只是合并的方式麻烦了一点. WA了一天才看到是多组数据. 盲人OI (- ̄▽ ̄)- Best OI. 代码自带大常数,比启发式合并都慢 [ ...
- HDU 1512 Monkey King (左偏树+并查集)
题意:在一个森林里住着N(N<=10000)只猴子.在一开始,他们是互不认识的.但是随着时间的推移,猴子们少不了争斗,但那只会发生在互不认识 (认识具有传递性)的两只猴子之间.争斗时,两只猴子都 ...
- ZOJ 2334 HDU 1512 Monkey King
题意: 猴子们打架 认识的猴子不会打架 两仅仅猴子打完以后就认识了 A认识B B认识C A也认识C 每次打架由两伙猴子进行 分别选出自己的最高战斗力 在战斗之后两仅仅猴子战斗力减半 给出 ...
随机推荐
- codeforces 439C Devu and Partitioning of the Array(烦死人的多情况的模拟)
题目 //这是一道有n多情况的烦死人的让我错了n遍的模拟题 #include<iostream> #include<algorithm> #include<stdio.h ...
- Android中 ListView 详解(二)
本文版权归 csdn noTice501 所有,转载请详细标明原作者及出处,以示尊重! 作者:noTice501 原文:http://blog.csdn.net/notice520/article/d ...
- java 驼峰命名
jstl中前台jsp页面调用对象中的属性时, 用的是小驼峰命名法. 例如:${item.createTime} 1.小驼峰式命名法(lower camel case): 第一个单字以小写字母开始,第二 ...
- linux中的磁盘的MBR记录详解
在硬盘中,硬盘的0柱面0磁头第一个1扇区称为主引导扇区,也叫主引导记录-MBR(main boot record),其中MBR是以下三个部分组成 1.Bootloader,主引导程序---446个字节 ...
- VS2013试用期结束后如何激活
在激活框中输入密钥:BWG7X-J98B3-W34RT-33B3R-JVYW9
- 一站式学习Wireshark(五):TCP窗口与拥塞处理
https://community.emc.com/message/821593#821593 介绍 TCP通过滑动窗口机制检测丢包,并在丢包发生时调整数据传输速率.滑动窗口机制利用数据接收端的接收窗 ...
- JavaPersistenceWithHibernate第二版笔记-第四章-Mapping persistent classes-001区分entities and value types
一.介绍 1.这种引用方式不对,但删除时不能级联 要这种引用方式 2.The Bid class could be a problem. In object-oriented modeling, th ...
- linux中U盘umonut时出现“Device is busy”的解决方法
问题: #umount /dev/sda1 umount: /mnt/usb: device is busy 查找占用目录进程: #lsof |grep /mnt/usb bash 1971 root ...
- struts2与struts1整合,java.lang.NoClassDefFoundError: org/apache/commons/logging/LogFactory
原因:我往项目的WEB-INF/lib中导入了struts2基本的包,还有struts1的core包,以及struts2-strut1-plugin的包,但是没有导入commons-loggin-1. ...
- PowerDesigner中name和code取消自动关联
PowerDesigner中,如果修改了某个字段的name,其code也跟着修改,如果想取消,可以如下操作 解决方法如下: 1.选择Tools->GeneralOptions...菜单,出现Ge ...