HNOI2014 公尺特運輸

2022-05-10 23:40:04 字數 2774 閱讀 7770

公尺特是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層)的儲存器全為空;依此類推,直到最後一層傳輸完成。傳輸過程一定會在晚上六點前完成。

由於技術原因,運輸方案需要滿足以下條件:

(1)不能讓某個儲存器到了晚上六點傳輸結束時還處於非空但又未滿的狀態,這個時候儲存器仍然會啟動自動收集公尺特的程式,而給已經儲存有公尺特的儲存器啟動收集程式可能導致危險,也就是說要讓儲存器到了晚上六點時要麼空要麼滿;

(2)關於首都——即1號城市的特殊情況, 每天早上六點到七點間1號城市中的公尺特儲存器裡的公尺特會自動被消耗殆盡,即運輸方案不需要考慮首都的公尺特怎麼運走;

(3)除了1號城市,每個節點必須在其子節點城市向它運輸公尺特之前將這座城市的公尺特儲存器中原本存有的公尺特全部運出去給父節點,不允許儲存器中殘存的公尺特與外來的公尺特發生混合;

(4)運向某乙個城市的若干個**的公尺特數量必須完全相同,不然,這些**不同的公尺特按不同比例混合之後可能發生危險。

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

輸入格式:

第一行是乙個正整數n,表示城市的數目。 接下來n行,每行乙個正整數,其中的第i行表示第i個城市原來存在的公尺特儲存器的容量。 再接下來是n-i行,每行兩個正整數a,b表示城市b到城市a有一條高速通道(a≠b)。

輸出格式:

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

輸入樣例#1:複製

554

3211 2

1 32 4

2 5

輸出樣例#1:複製

3
【樣例解釋】

乙個最優解是將a[1]改成8,a[3]改成4,a[5]改成2。這樣,2和3運給1的量相等,4和5運

給2的量相等,且每天晚上六點的時候,1,2滿,3,4,5空,滿足所有限制條件。

對於100%的資料滿足n<500000,a[j]<10^8

有這樣乙個結論,當這棵樹的任何乙個節點的權值確定之後,其餘所有節點的權值便都可算出來。

例如下圖:

如果固定乙個點的值,那麼其他值就都能確定,那麼就有一些值同樣不變

任務就是求出不變個數的最大值

設c[i]為1~i路徑上節點的出度積,如f[5]=f[4]=f[6]=2*3=6

那麼乙個值j固定,1點的目標值就是f[j]=a[j]*c[j]

也就是要求出出現次數最多的f[j]值

由於f太大,long long存不下,於是用3個孿生素數的hash陣列,取最小值

1 #include2 #include3 #include4 #include5 #include6

using

namespace

std;

7 typedef long

long

lol;

8struct

node

9edge[1000001

];12

int head[500001

],num,n;

13 lol ans,has1[1000008],has2[1000010],has3[1000020],a[500001],cnt[500001

],ans1,ans2,ans3;

14 lol mod1=1000007,mod2=1000009,mod3=999997;15

void add(int u,int

v)16

22void dfs(int x,int

pa,lol s1,lol s2,lol s3)

23 36}37

intmain()

38 44

for (i=1;i<=n-1;i++)

4550 dfs(1,0,1,1,1

);51 cout

52 }

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