\(f_\)表示以\(u\)為根的子樹中,\(u\)不取的最小開銷
\(f_\)表示以\(u\)為根的子樹中,\(u\)必取的最小開銷
\(g_\)表示以\(u\)為根的子樹中,不取重兒子,且\(u\)不取的最小開銷
\(g_\)表示以\(u\)為根的子樹中,不取重兒子,且\(u\)必取的最小開銷
設\(u\)的重兒子為\(w\)
\[f_=g_+f_\\
f_=g_+\min(f_,f_)
\]轉化方程
\[f_=\min(+\infty+f_,g_+f_)\\
f_=\min(g_+f_,g_+f_)
\]重定義矩陣乘法運算
\[c_=\min a_+b_
\]轉化為矩陣乘法
\[\begin
+\infty & g_\\
g_ & g_
\end
\times
\begin
f_ \\
f_\end
=\begin
f_ \\
f_\end
\]初始化葉子節點
\[\begin
0 \\
val_i
\end
\]轉化成\(2\times 2\)矩陣
\[\begin
0 & +\infty \\
val_i & +\infty
\end
\]基本結束
注意:節點\(a,b\)的\(g\)值也需要修改後再修改全域性平衡二叉樹
\(code:\)
#include#include#include#define n 100005
#define inf 10000000000007
#define ll long long
#define fa(x) f[x]
#define ls(x) ch[x][0]
#define rs(x) ch[x][1]
using namespace std;
int n,m,a,b,x,y,tot,rt,frt,val[n],fr[n],nxt[n << 1],d[n << 1];
int f[n],sz[n],son[n];
int q[n],qz[n];
int ch[n][2];
ll rc,rd,f[n][2],g[n][2];
char ty[5];
struct mat
mat operator * (mat b)
ll mn()
}z[n],s[n],ra,rb;
void add(int x,int y)
void dfs1(int u)
}}void update(int x)
int build(int l,int r)
else
l=mid+1;
}ls(q[o])=build(l,o-1);
rs(q[o])=build(o+1,r);
update(q[o]);
fa(ls(q[o]))=q[o];
fa(rs(q[o]))=q[o];
return q[o];
}void dfs2(int u)
else
f[u][0]=g[u][0]+f[son[u]][1];
f[u][1]=g[u][1]+min(f[son[u]][0],f[son[u]][1]);
z[u].setmat(inf,g[u][0],g[u][1],g[u][1]);
}if (son[f[u]]!=u)
}bool isrt(int x)
void modify(int x)
}int main()
else
modify(a);
rb=z[b];
if (y==0)
rd=g[b][1],g[b][1]=inf; else
rd=g[b][0],g[b][0]=inf;
if (son[b])
else
modify(b);
printf("%lld\n",(s[rt].mn()if (y==0)
g[b][1]=rd; else
g[b][0]=rd;
z[b]=rb;
modify(b);
if (x==0)
g[a][1]=rc; else
g[a][0]=rc;
z[a]=ra;
modify(a);
}return 0;
}
題解 LuoGu5024 保衛王國
原題傳送門 這裡不講ddp,用倍增優化樹形dp解決 前兩者可以直接遍歷求得,dpdp dp陣列可以倍增預處理的時候求得 對於每個詢問,要看兩個點u,v u,vu,v能影響到的區域 模仿倍增求lca lcalc a若u,vu,v u,v到根的鏈為同一條,則影響部分就是u uu到v vv若不是同一條,則...
LG5024 保衛王國
給定一棵 n 個點的樹,每個點的代價為 a i 每條邊至少有乙個端點要被選。m 次詢問,規定 x 和 y 選或不選,求覆蓋整棵樹的最小權值。考場上拿掉 44pts 就放棄了 下文中的 u 為子節點。這是不是非常顯然 dp x 0 1 表示第 x 個點不選 選時的最小代價 每次詢問時把 dp x 1 ...
P5024 保衛王國 倍增 dp
窩當然不會ddp啦,要寫這題當然是考慮優化裸dp啦,但是這題非常麻煩,於是變成了黑題。首先,這個是沒有上司的舞會模型,求圖的帶權最大獨立集。不考慮國王的限制條件,有 dp x 0 dp y 1 dp x 1 min dp y 1 dp y 0 現在考慮限制條件,如果對每乙個限制條件都做一次dp,複雜...