程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> ZOJ 2334左偏樹+並查集

ZOJ 2334左偏樹+並查集

編輯:C++入門知識

ZOJ 2334

題意很好理解……

這左偏樹看了上交模板,但是不知道怎麼用,研究了左偏樹好久……才會一點點……

左偏樹的操作都是建立在合並上,所以合並後的堆頂編號極其重要,我就是這裡搞了半天,才知道這裡錯了。

然後又查了其他資料,才弄清楚,因為在合並中有:dist[x]=dist[r[x]]+1;,所以合並的編號應該是更新 root[right] 的。

參考博客:https://www.byvoid.com/blog/leftist-tree/

#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#define PI acos(-1.0)
#define mem(a,b) memset(a,b,sizeof(a))
#define sca(a) scanf("%d",&a)
#define sc(a,b) scanf("%d%d",&a,&b)
#define pri(a) printf("%d\n",a)
#define lson i<<1,l,mid
#define rson i<<1|1,mid+1,r
#define MM 1000004
#define MN 1008
#define INF 100000007
#define eps 1e-7
using namespace std;
typedef long long LL;
typedef unsigned long long ULL;
int f[MM],root[MM];  //root是初始每個左偏樹的堆頂編號
int tot,v[MM],l[MM],r[MM],dist[MM];
int Merge(int x,int y)
{
    if(!x) return y;
    if(!y) return x;
    if(v[x]

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved