樹鏈剖分 LGP3613 睡覺困難症候群

2021-08-13 10:18:14 字數 2318 閱讀 9634

原題位址

【題目大意】

不想打了。

【題目分析】

每一位不會互相影響,可以把每一位分開考慮。

還要用unsigned long long。

【解題思路】

將每一位分開以後修改好啊,直接改就好了。

詢問的時候算出來每一位填0,1經過這條鏈的變換之後得到的值。

我們發現從高位往低位走的時候,如果這一位填0可以得到1,那麼填0一定是最優的。

否則如果可以填1,就把這一位填為1。

複雜度是nk

log2

n (樹剖)或者nk

logn

(lct),只能通過50%的資料

然後我們決定把這個k搞掉。

只要把k位一起算就可以了,多維護幾個值就好。

複雜度是o(

nklo

g2n)

(樹剖)或者o(

nklo

gn) (lct)

【**】

#include

#include

#include

#include

using namespace std;

typedef unsigned long long ull;

const ull mx=0-1;

const int maxn=2e5+10;

int n,m,k,tot,sz;

int opt[maxn],siz[maxn],dep[maxn],q[maxn],pos[maxn];

int head[maxn],top[maxn],son[maxn],fa[maxn];

ull val[maxn],cf[maxn];

struct tway

;tway e[maxn<<1];

struct tree

;tree tree[maxn<<2],ans0[maxn],ans1[maxn];

inline void add(int u,int v)

inline void dfs0(int u,int f)

}inline void dfs1(int u,int tp)

}inline ull calc(ull num,int u)

inline tree update(tree l,tree r)

inline void pushup(int rt)

inline void build(int rt,int l,int r)

int mid=(l+r)>>1;

build(rt<<1,l,mid);

build(rt<<1|1,mid+1,r);

pushup(rt);

}inline void changep(int rt,int l,int r,int p)

int mid=(l+r)>>1;

if(p<=mid)

changep(rt<<1,l,mid,p);

else

changep(rt<<1|1,mid+1,r,p);

pushup(rt);

}inline tree query(int rt,int l,int r,int l,int r)

inline tree solve(int

x,int

y) else

}if(dep[x]>=dep[y])

ans0[++cnt0]=query(1,1,n,pos[y],pos[x]);

else

ans1[++cnt1]=query(1,1,n,pos[x],pos[y]);

for(int i=1;i<=cnt0;++i)

swap(ans0[i].v0,ans0[i].w0),swap(ans0[i].v1,ans0[i].w1);//swap false first

tree sum;

if(cnt0)

else

sum=ans1[cnt1];

for(int i=cnt1-1;i>=1;--i)

sum=update(sum,ans1[i]);

printf("%d

%d%d

%d\n",sum.v0,sum.v1,sum.w0,sum.w1);

return sum;

}int main()

dfs0(1,0);dfs1(1,1);

build(1,1,n);

for(int i=1;i<=m;++i)

}printf("%llu\n",ret);

}else

}return

0;}

LG P3384 模板 樹鏈剖分

p3384 模板 樹鏈剖分 題目鏈結 題目描述 如題,已知一棵包含n個結點的樹 連通且無環 每個節點上包含乙個數值,需要支援以下操作 操作1 格式 1 x y z 表示將樹從x到y結點最短路徑上所有節點的值都加上z 操作2 格式 2 x y 表示求樹從x到y結點最短路徑上所有節點的值之和 操作3 格...

樹鏈剖分 樹鏈剖分講解

好了,這樣我們就成功解決了對樹上修改查詢邊權或點的問題。下面放上 vector v maxn int size maxn dep maxn val maxn id maxn hson maxn top maxn fa maxn 定義 int edge 1,num 1 struct tree e ma...

演算法入門 樹鏈剖分 輕重鏈剖分

目錄 3.0 求 lca 4.0 利用資料結構維護資訊 5.0 例題 參考資料 資料結構入門 線段樹 發表於 2019 11 28 20 39 dfkuaid 摘要 線段樹的基本 建樹 區間查詢 單點修改 及高階操作 區間修改 單點查詢 區間修改 區間查詢 標記下傳 標記永久化 閱讀全文 樹鏈剖分用...