傳送門
聽說這是一道樹形dp,不過我不知道怎麼dp,我只想出來了dfs的做法。
原題可以轉化成一棵樹,從給定的根節點到所有的葉節點,問要把這些路徑的長度設成同乙個值最少要更改多少次。
我們考慮之後發現,肯定是在深度比較低的邊上做修改,使得最後的修改次數比較少,不過如何確定要修改多少次呢?我們可以先遞迴到葉節點,之後回溯的時候對於每乙個節點, 我們可以統計這個節點的所有子樹中路徑最長的有多長,其他的子樹只要加上差值就可以了。
這題當時想到了做法……不過做反了,從底層回溯的時候能更好的統計答案。注意在統計答案的時候不能訪問到自己的父節點……所以要更改一下vis陣列來記錄情況。
#include#include#include
#include
#include
#include
#include
#define rep(i,a,n) for(int i = a;i <= n;i++)
#define per(i,n,a) for(int i = n;i >= a;i--)
#define enter putchar('\n')
using
namespace
std;
typedef
long
long
ll;const
int m = 500005
;const
int n = 10005
;ll read()
while(ch >= '
0' && ch <= '9'
)
return ans *op;
}struct
edge
e[m<<1
];ll n,s,ans,a,b,t,dis[m],head[m],ecnt;
bool
vis[m];
void add(int x,int y,int
z)int dfs(int
x) }
for(int i = head[x];i;i =e[i].next)
return
maxn;
}int
main()
ZJOI2007 時態同步
題目描述 小q在電子工藝實習課上學習焊接電路板。一塊電路板由若干個元件組成,我們不妨稱之為節點,並將其用數字1,2,3 進行標號。電路板的各個節點由若干不相交的導線相連線,且對於電路板的任何兩個節點,都存在且僅存在一條通路 通路指連線兩個元件的導線序列 在電路板上存在乙個特殊的元件稱為 激發器 當激...
ZJOI2007 時態同步
小q在電子工藝實習課上學習焊接電路板。一塊電路板由若干個元件組成,我們不妨稱之為節點,並將其用數字1,2,3 1,2 3 進行標號。電路板的各個節點由若干不相交的導線相連線,且對於電路板的任何兩個節點,都存在且僅存在一條通路 通路指連線兩個元件的導線序列 在電路板上存在乙個特殊的元件稱為 激發器 當...
ZJOI2007 時態同步
傳送門 這道題目有點水啊,只要深搜到葉子節點,然後回溯,找出乙個點到它的兒子節點的最大距離,ans ans ans 最大距離 到每個兒子節點距離,最後記得把它父親節點到它的距離加上之前所求的最大距離。include define il inline define ll long long defin...