原題位址
【題目大意】
不想打了。
【題目分析】
每一位不會互相影響,可以把每一位分開考慮。
還要用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 摘要 線段樹的基本 建樹 區間查詢 單點修改 及高階操作 區間修改 單點查詢 區間修改 區間查詢 標記下傳 標記永久化 閱讀全文 樹鏈剖分用...