HNOI2014 公尺特運輸

2022-05-08 06:00:09 字數 1283 閱讀 9860

題面在這裡

乙個\(n\)個節點的樹,修改一些節點的權值(可以為小數但不能為負),

使得這棵樹中,父節點的權值等於字節點權值之和,且父節點相同的節點的權值相等

求修改節點數的最小值

\[n≤500000, v_i≤10^8

\]如果我們確定了乙個節點的值,那麼我們就可以得到這棵樹所有節點的權值

因為樹中節點權值都存在倍數關係

於是我們把根節點的取值作為狀態,最後取與根節點取值相符的點數最多的一類即可

但是這個根節點的取值可能會爆\(long\ long\)...

於是\(hash\)一下就可以了

直接模zsy\(998244353\)

#include#include#include#include#include#include#include#include#include#include#include#include#include#include#include#include//#define test

#define file "a"

#define pb push_back

#define rg register

#define il inline

using namespace std;

typedef unsigned long long ull;

typedef vectorvi;

typedef long long ll;

typedef double dd;

const int inf=1e9+7;

const int rev2=332748118;

const int mod1=1e9+7;

const int zsy=998244353;

const int n=1000001;

const int k=1000010;

const dd eps=1e-10;

const ll inf=1e18;

il ll read()

il void file()

mapm;

map::iterator tmp;

int n,a[n],ans;

int head[n],nxt[n<<1],to[n<<1],cnt;

il void add(int u,int v)

int son[n];

void dfs(int u,int fa,ull data)

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