作者部落格:
正解:排序+分析
解題報告:
題目給出的各項約束條件,其實就是想告訴我們乙個這樣的模型:
每個點的權值$=$父親節點的權值*父親節點的兒子節點個數,修改盡量少的點權使得滿足要求。
然後可以發現,只要確定了乙個點填什麼,整棵樹的點權其實就唯一確定了…
考慮兩個點$u$、$v$,令$dis[x]=$x走到根需要乘的數(也就是到根的路徑上的每個節點的兒子節點個數的連乘),令$a$表示點權,他們兩個可以同時不修改,當且僅當$a[u]*dis[u]=a[v]*dis[v]$,不妨設為$c$,把每個數的$c$算出來,答案就是$n-tot$,$tot$表示出現次數最多的那個$c$的出現次數。因為連乘起來數字太大,可以用$hash$或者取對數。
//it is made by ljh2000#include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std;
typedef long long ll;
const int maxn = 500011;
const int maxm = 1000011;
const long double eps = 1e-8;//eps!!!
int n,a[maxn],ecnt,first[maxn],to[maxm],next[maxm],son[maxn],ans;
long double p[maxn];
inline int getint()
inline bool cmp(long double x,long double y)
inline void dfs(int x,int fa)
}inline void dfs2(int x,int fa,long double lei)
}inline void work()
dfs(1,0); dfs2(1,0,0); p[1]+=log(a[1]); sort(p+1,p+n+1); x=1;
for(int i=1;i<=n;i++)
} printf("%d",n-ans);
}int main()
bzoj 3573 Hnoi2014 公尺特運輸
題目好難懂。簡述題意 給出一棵樹,要求滿足兩個要求 1.每個節點的子節點權值相等。2.每個節點的權值和是這個節點的權值。然後就出最小修改點的數量來滿足這個要求。那麼顯而易見只要確定乙個節點就可以確定群圖節點權值。這樣列舉是 通過這個結論我們發現只要確定1就可以確定全圖,所以可以通過讓每乙個節點權值不...
BZOJ 3573 Hnoi2014 公尺特運輸
bzoj 3573 hnoi2014 公尺特運輸 樹形dp hash 題意 給你一棵樹每個點有乙個權值,要求修改最少的權值,使得每個節點的權值等於其兒子的權值和且兒子的權值都相等。分析 首先我們發現在樹中如果確定乙個點的權值,那麼整顆樹的方案就能夠確定 問題轉化成求哪個方案包含的點最多 如何求包含這...
bzoj3573 Hnoi2014 公尺特運輸
好吧,雖然這是day1最後一題,但卻是最水的一題。前提 看懂題目 仔細看題!仔細看題!仔細看題!看懂題後就知道設第 i 個點的兒子節點的個數為 degree i 容量為 a i 我們要修改最少的點的容量,使得每個點 i 的兒子的容量均為 frac 我們發現如果乙個點的容量是確定的,那麼整個樹的容量都...