給一棵m個結點的無根樹,你可以選擇乙個度數大於1的結點作為根,然後給一些結點(根、內部結點和葉子均可)著以黑色或白色。你的著色方案應該保證根結點到每個葉子的簡單路徑上都至少包含乙個有色結點(哪怕是這個葉子本身)。 對於每個葉結點u,定義c[u]為從根結點從u的簡單路徑上最後乙個有色結點的顏色。給出每個c[u]的值,設計著色方案,使得著色結點的個數盡量少。
第一行包含兩個正整數m, n,其中n是葉子的個數,m是結點總數。結點編號為1,2,…,m,其中編號1,2,… ,n是葉子。以下n行每行乙個0或1的整數(0表示黑色,1表示白色),依次為c[1],c[2],…,c[n]。以下m-1行每行兩個整數a,b(1<=a < b <= m),表示結點a和b 有邊相連。
僅乙個數,即著色結點數的最小值。
5 301
01 4
2 54 5
3 5
2
m<=10000
n<=5021
推薦博文題解 p3155 【[cqoi2009]葉子的染色】
#include#include#include#include#include#include#include#include#includeusing namespace std;
const int n=12000,m=25000;
const int inf=999999;
int n,m,dp[n][2],c[n];
struct edge
e[m];
int ne,hd[n];
bool v[n];
void build(int u,int v)
,hd[u]=ne;
}void read()
}void init()
void tree_dp(int id)
}int main()
1304 CQOI2009 葉子的染色
原博主部落格 time limit 10 sec memory limit 162 mb description 給一棵m個結點的無根樹,你可以選擇乙個度數大於1的結點作為根,然後給一些結點 根 內部結點和葉子均可 著以黑色或白色。你的著色方案應該保證根結點到每個葉子的簡單路徑上都至少包含乙個有色結...
CQOI2009 葉子的染色
首先,選擇任意乙個度數大於 1 的節點為根的最優的答案都是固定的,具體證明這裡不加贅述。我們仔細研究,他只要求根節點到葉子節點的最後乙個有色節點的顏色。我們對第 x 號節點染色,意味著我們把所有它子樹中的葉子節點最近的乙個有色節點的顏色就發生了改變。顯然,兒子越多的節點價效比越高。因此,我們定義 d...
P3155 CQOI2009 葉子的染色
題目描述 給一棵m個結點的無根樹,你可以選擇乙個度數大於1的結點作為根,然後給一些結點 根 內部結點和葉子均可 著以黑色或白色。你的著色方案應該保證根結點到每個葉子的簡單路徑上都至少包含乙個有色結點 哪怕是這個葉子本身 對於每個葉結點u,定義c u 為從根結點從u的簡單路徑上最後乙個有色結點的顏色。...