日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

[luogu1131][bzoj1060][ZJOI2007]时态同步【树形DP】

發(fā)布時(shí)間:2025/7/14 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 [luogu1131][bzoj1060][ZJOI2007]时态同步【树形DP】 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

傳送門:https://www.luogu.org/problemnew/show/P1131

題目大意

給你一棵樹,每條邊有邊權(quán),要求增加一些邊的邊權(quán),使得根節(jié)點(diǎn)到每個(gè)葉子節(jié)點(diǎn)的距離相等,求出最少共增加多少邊權(quán)。

分析

簡單樹形DP,定義\(ans[u]\)表示根節(jié)點(diǎn)為\(u\)的最少邊權(quán),那么定義\(f[u]\)表示葉子中最大的距離,那么我們要將所有的其他路徑都變成這個(gè)值,直接在當(dāng)前狀態(tài)下直接加掉。

ac代碼

#include <bits/stdc++.h> #define ll long long #define ms(a, b) memset(a, b, sizeof(a)) #define inf 0x3f3f3f3f #define N 500005 using namespace std; template <typename T> inline void read(T &x) {x = 0; T fl = 1;char ch = 0;while (ch < '0' || ch > '9') {if (ch == '-') fl = -1;ch = getchar();}while (ch >= '0' && ch <= '9') {x = (x << 1) + (x << 3) + (ch ^ 48);ch = getchar();}x *= fl; } struct edge {int to, nt, w; }E[N << 1]; ll ans[N], f[N]; int H[N]; int n, s, cnt; void add_edge(int u, int v, int w) {E[++ cnt] = (edge){v, H[u], w}; H[u] = cnt; } void dfs(int u, int fa) {for (int e = H[u]; e; e = E[e].nt) {int v = E[e].to;if (v == fa) continue;dfs(v, u);f[u] = max(f[u], f[v] + E[e].w);ans[u] += ans[v];}for (int e = H[u]; e; e = E[e].nt) {int v = E[e].to;if (v == fa) continue;ans[u] += f[u] - f[v] - E[e].w;} } int main() {read(n); read(s);for (int i = 1; i < n; i ++) {int u, v, w;read(u); read(v); read(w);add_edge(u, v, w);add_edge(v, u, w);}dfs(s, -1);printf("%lld\n", ans[s]);return 0; }

轉(zhuǎn)載于:https://www.cnblogs.com/chhokmah/p/10552094.html

總結(jié)

以上是生活随笔為你收集整理的[luogu1131][bzoj1060][ZJOI2007]时态同步【树形DP】的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。