HNOI2014 公尺特運輸

2022-05-02 05:33:08 字數 1019 閱讀 5901

首先我們需要看懂題目

然後我們需要發現乙個結論

只要有乙個節點的權值確定,那麼整棵樹的權值就確定了

然後我們根據這張,可以設\(f[i] = a[i] \cdot \prod_f \mathrm[f]\)

其中\(f\)是\(i\)的祖先,\(\mathrm[f]\)表示\(f\)的子節點的個數,\(a[i]\)表示\(i\)的權值

於是我們可以用顯然法證明當\(f[i] = f[j]\)時,\(i\)和\(j\)的權值肯定在一種方案中都不用修改

於是算出最多有多少點的\(f\)值相等

然後你愉快地打了上去,oho了

\(f\)會爆long long,於是考慮取對數就可以了

普及公式:\(\log_c a + \log_c b = \log_c (ab)\)

#include#include#include#include#include#define rg register

#define file(x) freopen(#x".in", "r", stdin), freopen(#x".out", "w", stdout)

#define clear(x, y) memset(x, y, sizeof(x))

inline int read()

const double eps(1e-8);

const int maxn(500010);

struct edge e[maxn];

int head[maxn], e_num, n, a[maxn], deg[maxn];

double f[maxn];

inline void add_edge(int from, int to)

; head[from] = e_num;

}void dfs(int x, double s)

int main()

printf("%d\n", n - ans);

return 0;

}

HNOI2014 公尺特運輸

顯然知道乙個節點就可以推出整棵樹 然而直接乘會爆longlong 所以考慮取log 最後排序算眾數即可 include include include include include include define il inline define rg register define fill a,...

HNOI2014 公尺特運輸

原題鏈結 題目麻煩的一批。下面直接給簡化版 給一棵樹,每個點有乙個權值,要求修改一些點的權值,使得 同乙個父親的兒子權值必須相同 父親的取值必須是所有兒子權值之和 問最小要修改幾個點。很顯然這是乙個樹形dp。由於這個要求,樹上只要有乙個點確定,全樹的權值就都確定了。那麼我們只要計算將路徑上權值的累乘...

HNOI2014 公尺特運輸

公尺特是d星球上一種非常神秘的物質,蘊含著巨大的能量。在以公尺特為主要能源的d星上,這種公尺特能源的運輸和儲存一直是乙個大問題。d星上有n個城市,我們將其順序編號為1到n,1號城市為首都。這n個城市由n 1條單向高速通道連線起來,構成一棵以1號城市 首部 為根的樹,高速通道的方向由樹中的兒子指向父親...