uva1220樹的最大獨立集

2022-06-21 15:12:11 字數 1018 閱讀 3406

題意:公司裡除了老闆,每個人都有乙個直屬上司,要求選盡量多的人,但不能同時選乙個人和他的直屬上司,問最多能選多少個人,以及在人數最多的情況下方案是否唯一。

思路:d[u][0]表示不選u點能得到的最大人數d[u][0]=sum

d[u][1]表示選u點能得到的最大人數d[u][1]=sum

f[u][0]表示不選u點能獲得的最大人數方案是否唯一,1.d[v][0]=d[v][1],不唯一(用1表示不唯一)。2.選擇d[v][0]且f[v][0]=1;選擇d[v][1]且f[v][1]=1。

f[u][1]表示選擇u點能獲得的最大人數方案是否唯一,f[v][0]=1時f[u][1]=1。

dfs

#includeusing

namespace

std;

int d[204][2],f[205][2

];vector

child[205

];void dp(int

u)

int len=child[u].size();

for(int i=0;i)

if(d[a][1]==d[a][0])//

²»î¨ò»

if(d[a][0]1])

d[u][

1]=d[u][1]+d[a][0

];

if(f[a][0]==1)f[u][1]=1

; }

d[u][

1]++;

}int

main()

dp(1);

int flag=0

;

if(d[1][1]>d[1][0])flag=1

; cout

<1][flag]<<'';

if(f[1][flag]==1||d[1][0]==d[1][1])cout<<"no"

yes"

>n;

}return0;

}

uva1220 樹的最大獨立集 判重

題意是挑選盡量多的人,並且每個人都不和他的父節點同時出現,很明顯的最大獨立集問題,難點在於如何判斷方案是否唯一。詳情請見劉汝佳 演算法競賽入門經典 第二版 p282 include include include include include include include define inf ...

樹的最大獨立集

include include includeusing namespace std ifstream fin c data19.in struct node int data int c int gc struct node parent struct node left struct node ...

樹的最大獨立集

題意 對於一棵有n個結點的無根樹,選出盡量多的結點,使得任何兩個結點均不相鄰 稱為最大獨立集 sol 樹形dp 由於每個點只由其兒子或者孫子決定 二者的最大值 所以我們可以深搜一遍,回溯的時候用當前節點更新其父親以及父親的父親 因為此時該節點的值已經被我們計算出來了 這種由已知貢獻給未知的方法稱為刷...