日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

[CQOI2009]叶子的染色(树形dp)

發布時間:2023/12/15 编程问答 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 [CQOI2009]叶子的染色(树形dp) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

鏈接:https://ac.nowcoder.com/acm/problem/19914
來源:牛客網

題目描述
給一棵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 有邊相連。
輸出描述:
僅一個數,即著色結點數的最小值。
示例1
輸入
復制
5 3
0
1
0
1 4
2 5
4 5
3 5
輸出
復制
2
給定的c數組中的值都是葉子節點。一開始沒看清楚,怎么也想不出來。我們用dp[i][0/1]來代表第i個結點染成白色或者黑色之后,以它為根的子樹最小的染色次數。
對于葉子節點,如果他是白色,就將dp[i][0]設置為1,否則就將dp[i][1]設置為無窮大。反之也一樣。
對于當前節點,如果它染成白色,那么它的子樹中某個染成白色點就可以不用染色了,這樣的話結果是更優的。這樣的話,就不斷的尋找最優值。
狀態轉移方程:
dp[u][1]+=min(dp[to][1]-1,dp[to][0]);
dp[u][0]+=min(dp[to][0]-1,dp[to][1]);
代碼如下:

#include<bits/stdc++.h> #define ll long long #define inf 0x3f3f3f3f using namespace std;const int maxx=1e5+100; struct edge{int to,next; }e[maxx<<1]; int head[maxx],tot; int dp[maxx][2],c[maxx]; int n,m; /*------------事前準備-----------*/ inline void init() {memset(head,-1,sizeof(head));tot=0; } inline void add(int u,int v) {e[tot].to=v,e[tot].next=head[u],head[u]=tot++; } /*-------------樹形dp------------*/ inline void dfs(int u,int f) {dp[u][0]=dp[u][1]=1;if(u<=n){if(c[u]) dp[u][0]=inf;else dp[u][1]=inf;}for(int i=head[u];i!=-1;i=e[i].next){int to=e[i].to;if(to==f) continue;dfs(to,u);dp[u][1]+=min(dp[to][1]-1,dp[to][0]);//兩種取最優。dp[u][0]+=min(dp[to][0]-1,dp[to][1]);} }int main() {int x,y;while(~scanf("%d%d",&m,&n)){init();for(int i=1;i<=n;i++) scanf("%d",&c[i]);for(int i=1;i<m;i++){scanf("%d%d",&x,&y);add(x,y);add(y,x);}dfs(n+1,0);//前n個結點都是葉子節點,所以從n+1dfsprintf("%d\n",min(dp[n+1][0],dp[n+1][1]));}return 0; }

努力加油a啊,(o)/~

總結

以上是生活随笔為你收集整理的[CQOI2009]叶子的染色(树形dp)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。