hdu 1512 Monkey King (左偏树 可并堆)

news/2024/11/17 22:15:58/

hdu 1512 Monkey King (左偏树 实现 可并堆)

模板:http://hi.baidu.com/cjn1466572108/item/c2b7c13e58f7aba1b711dba6

待验证

//#pragma comment(linker, "/STACK:1024000000,1024000000")
#include <cstdio>
#include <ctime>
#include <cstdlib>
#include <cstring>
#include <queue>
#include <string>
#include <set>
#include <stack>
#include <map>
#include <cmath>
#include <vector>
#include <iostream>
#include <algorithm>
using namespace std;#define FF(i, a, b) for(int i = (a); i < (b); ++i)
#define FE(i, a, b) for(int i = (a); i <= (b); ++i)
#define FD(i, b, a) for(int i = (b); i >= (a); --i)
#define REP(i, N) for(int i = 0; i < (N); ++i)
#define CLR(a, v) memset(a, v, sizeof(a))
#define PB push_back
#define MP make_pairtypedef long long LL;
const int INF = 0x3f3f3f3f;
const int maxn = 310000;struct Node{int l, r;int fa;int v, dis;bool operator<(const Node &rhs) const{return v < rhs.v;///大顶堆}
}N[maxn];int root[maxn];
int findset(int x)
{return x == N[x].fa ? x : N[x].fa = findset(N[x].fa);
}void Newnode(int i, int val)
{N[i].l = N[i].r = 0;N[i].fa = i;N[i].dis = 0;N[i].v = val;
}void Init(int n)
{N[0].l = N[0].r = 0;N[0].v = 0; N[0].dis = -1;N[0].fa = 0;int val;for (int i = 1; i <= n; i++){scanf("%d", &val);Newnode(i, val);}
}int Merge(int A, int B)
{if (A == 0) return B;if (B == 0) return A;if (N[A] < N[B]) swap(A, B);N[A].r = Merge(N[A].r, B);N[N[A].r].fa = A;///if (N[N[A].l].dis < N[N[A].r].dis) swap(N[A].l, N[A].r);N[A].dis = N[N[A].r].dis + 1;return A;
}int pop(int x)
{int l = N[x].l;int r = N[x].r;N[l].fa = l;///N[r].fa = r;///return Merge(l, r);
}int main ()
{int n, m;int x, y, fax, fay;while (scanf("%d", &n) != EOF){Init(n);scanf("%d", &m);while (m--){scanf("%d%d",&x, &y);fax = findset(x); fay = findset(y);if (fax == fay) printf("-1\n");else{int A = pop(fax);Newnode(fax, N[fax].v / 2);A = Merge(A, fax);int B = pop(fay);Newnode(fay, N[fay].v / 2);B = Merge(B, fay);printf("%d\n", N[Merge(A, B)].v);}}}return 0;
}



http://www.ppmy.cn/news/271992.html

相关文章

【DB宝42】MySQL高可用架构MHA+ProxySQL实现读写分离和负载均衡

文章目录 一、MHAProxySQL架构二、快速搭建MHA环境2.1 下载MHA镜像2.2 编辑yml文件&#xff0c;创建MHA相关容器2.3 安装docker-compose软件&#xff08;若已安装&#xff0c;可忽略&#xff09;2.4 创建MHA容器2.5 主库131添加VIP 三、配置ProxySQL环境3.1 申请ProxySQL主机并…

hdu1512 zoj2334Monkey King(左偏树 + 并查集)

参考:http://blog.csdn.net/pi9nc/article/details/11827501 题目:https://vjudge.net/problem/HDU-1512 他的注释很详细. 题目大意&#xff1a;有n个猴子&#xff0c;一开始每个猴子只认识自己。每个猴子有一个力量值&#xff0c;力量值越大表示这个猴子打架越厉害。如果2个…

HDOJ 1512 Monkey King -- 左偏树

题目链接&#xff1a;http://acm.hdu.edu.cn/showproblem.php?pid1512 分析&#xff1a;左偏树应用。在结点中加入了parent指针和id字段&#xff0c;这样可以代替并查集。关于左偏树可以参考黄源河的论文《左偏树的特点及其应用》。 #include #include #include #include #in…

第 197 场周赛 leetcode 1512. 好数对的数目 1513. 仅含 1 的子串数 1514. 概率最大的路径

1512. 好数对的数目 直接算每个数即可 class Solution { public:int numIdenticalPairs(vector<int>& nums) {int mp[110]{0};memset(mp,0,sizeof(0));for(int i0;i<nums.size();i){mp[nums[i]];}long long ans0;for(int i0;i<100;i){ans(long long)mp[i]*(m…

一文看尽深度学习中的20种卷积(附源码整理和论文解读)

点击上方“计算机视觉工坊”&#xff0c;选择“星标” 干货第一时间送达 引言 卷积&#xff0c;是卷积神经网络中最重要的组件之一。不同的卷积结构有着不一样的功能&#xff0c;但本质上都是用于提取特征。比如&#xff0c;在传统图像处理中&#xff0c;人们通过设定不同的算子…

ZYNQ Linux 双网口,MDIO共用,RESET-GPIO不共用

目录 前言一、硬件方案二、第一种方法&#xff1a;只配置设备树二、第二种方法&#xff1a;修改内核驱动和设备树1. 修改设备树2. 修改设备树kernel中 PHY GPIO 复位程序修改3. kernel中 PHY LED指示灯配置修改 三、文件系统中 网络配置文件修改四、U-Boot 中添加PHY GPIO Rese…

supersocket client 固定端口_西门子CPU控制器1512P-1PN端口交换机附件200KB

西门子CPU控制器1512P-1PN端口交换机附件200KB 浔之漫智控技术(上海)有限公司 上海诗慕自动化设备有限公司本公司销售西门子自动化产品&#xff0c;全新原装&#xff0c;质量保证&#xff0c;价格优势西门子PLC,西门子触摸屏&#xff0c;西门子数控系统&#xff0c;西门子…

【HDOJ】1512 Monkey King

左偏树并查集。左偏树就是可合并二叉堆。 1 /* 1512 */2 #include <iostream>3 #include <string>4 #include <map>5 #include <queue>6 #include <set>7 #include <stack>8 #include <vector>9 #include <deque>10 #include …