戳我
誰出的題目啊?這麼長的題面,看完就滾粗了.強烈譴責
給一棵樹,每個點有乙個權值,要求修改一些權值,使:乙個點的權值必須是其所有兒子的權值之和
乙個點的兒子權值必須相同
求最少的被修改的數目
隨便畫一畫圖就可以找到一些顯著的規律,只要確定了乙個點的權值就可以知道整顆樹的值了.
這裡就不詳細的給出圖進行解釋了,自己畫一畫圖就可以知道了.
於是我們可以令\(val[x]\)表示\(x\)這個點不變的話,根節點的值.
但是將子節點的個數成起來會爆\(long\ long\),所以需要運用一點小技巧:\(log\)
運用公式:\(log(a*b)=log(a)+log(b)\)
答案就是\(n-val\)陣列中相同個數最多的.
#includeusing namespace std;
const double eps=1e-6;
int read()
struct node a[500010<<1];
double val[500010];
int v[500010],head[500010],s[500010],cnt;
void add(int x,int y)
void dfs(int x,int fa,double ans)
}main()
printf("%d",n-maxx);
}
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號城市 首部 為根的樹,高速通道的方向由樹中的兒子指向父親...