HNOI2014 公尺特運輸

2022-05-31 17:27:12 字數 2382 閱讀 4433

description

公尺特是d星球上一種非常神秘的物質,蘊含著巨大的能量。在以公尺特為主要能源的d星上,這種公尺特能源的運輸和儲存一直是乙個大問題。d星上有n個城市,我們將其順序編號為1到n,1號城市為首都。這n個城市由n-1條單向高速通道連線起來,構成一棵以1號城市(首部)為根的樹,高速通道的方向由樹中的兒子指向父親。樹按深度分層:根結點深度為0,屬於第1層;根結點的子節點深度為1,屬於第2層;依此類推,深度為i的結點屬於第i+l層。建好高速通道之後,d星人開始考慮如何具體地儲存和傳輸公尺特資源。由於發展程度不同,每個城市儲存公尺特的能力不盡相同,其中第i個城市建有乙個容量為a[i]的公尺特儲存器。這個公尺特儲存器除了具有儲存的功能,還具有自動收集公尺特的能力。如果到了晚上六點,有某個儲存器處於未滿的狀態,它就會自動收集大氣中蘊含的公尺特能源,在早上六點之前就能收集滿;但是,只有在儲存器完全空的狀態下啟動自動收集程式才是安全的,未滿而又非空時啟動可能有安全隱患。早上六點到七點間,根節點城市(1號城市)會將其儲存器裡的公尺特消耗殆盡。根節點不會自動蒐集公尺特,它只接受子節點傳輸來的公尺特。早上七點,城市之間啟動公尺特傳輸過程,傳輸過程逐層遞進:先是第2層節點城市向第1層(根節點城市,即1號城市)傳輸,直到第1層的儲存器滿或第2層的儲存器全為空;然後是第3層向第2層傳輸,直到對於第2層的每個節點,其儲存器滿或其予節點(位於第3層)的儲存器全為空;依此類推,直到最後一層傳輸完成。傳輸過程一定會在晚上六點前完成。由於技術原因,運輸方案需要滿足以下條件:

現在d星人已經建立好高速通道,每個城市也有了一定儲存容量的公尺特儲存器。為了滿足上面的限制條件,可能需要重建一些城市中的公尺特儲存器。你可以,也只能,將某一座城市(包括首都)中原來存在的公尺特儲存器摧毀,再新建一座任意容量的新的公尺特儲存器,其容量可以是小數(在輸入資料中,儲存器原始容量是正整數,但重建後可以是小數),不能是負數或零,使得需要被重建的公尺特儲存器的數目盡量少。

input

第一行是乙個正整數n,表示城市的數目。

接下來n行,每行乙個正整數,其中的第i行表示第i個城市原來存在的公尺特儲存器的容量。

再接下來是n-i行,每行兩個正整數a,b表示城市b到城市a有一條高速通道(a≠b)。

n<500000,a[j]<10^8

output

輸出檔案僅包含一行,乙個整數,表示最少的被重建(即修改儲存器容量)的公尺特儲存器的數目。

sample input55

4321

1 21 3

2 42 5

sample output

3閱讀題nb

給定一棵樹,請你改變一些點的點權,使得乙個節點的所有兒子節點權值相同,並且所有兒子節點的權值和為自己

當任意乙個點權值確定後,整棵樹的權值就全部都確定了,我們考慮從根節點出發,記\(f[i]\)表示\(i\)的權值為\(v[i]\)時,根的權值。直接記權值不太方便轉移,我們更改一下,\(f[i]\)記錄係數,也就是記錄\(i\)的權值為\(v[i]\)時,根的權值是\(f[i]\times v[i]\)

轉移即為\(f[v]=f[u]\times(d[u]-[u!=1])\),其中\(u\rightarrow v\)且\(d[u]\)表示\(u\)的度數,然後我們記\(g[i]=f[i]\times v[i]\),對\(g\)排序,\(g[i]=g[j]\)則說明\(i,j\)可以同時滿足條件,於是我們取相同值最多的,其他的都是需要更改的

由於一路乘下來可能會爆long long,所以可以寫高精度,或者我們取個log,轉化為加法即可(注意精度)

/*program from wolfycz*/

#include#include#include#include#include#define inf 0x7f7f7f7f

using namespace std;

typedef long long ll;

typedef unsigned int ui;

typedef unsigned long long ull;

inline char gc()

inline int frd()

inline int read()

inline void print(int x)

const double eps=1e-8;

const int n=5e5;

int pre[(n<<1)+10],now[n+10],child[(n<<1)+10],tot;

int d[n+10];

double f[n+10];

void join(int x,int y)

void insert(int x,int y)

void dfs(int x,int fa,double v)

}int main()

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號城市 首部 為根的樹,高速通道的方向由樹中的兒子指向父親...