poj1419 染色 最大獨立集

2022-07-24 01:42:14 字數 1184 閱讀 9160

題意:

經典的圖的染色問題,求對於給定的無向圖中,給每個結點染兩種不同顏色(黑色和白色)的一種且相鄰結點的顏色不同,求染成黑色的最多結點數。

分析:這個題求的圖的最大獨立集,最大獨立集即為黑色節點的個數。

由於原圖的最大獨立集=補圖的最大團。

而這個題是普通圖,所以用回溯法來做,時間複雜度o(n*2^n)

**:view code

1 #include 2 #include 3 #include 4

using

namespace

std;56

const

int maxnum=101;7

bool

array[maxnum][maxnum];

8bool use[maxnum]; //

進入團的標號

9bool

bestx[maxnum];

10int

cn,bestn,p,e;

1112

void dfs(int

i)13

2930 flag=true;31

for(j=1;j)

32if(use[j]&&!array[j][i])

3337

if(flag)

3844

if(cn+p-i>bestn) //

剪枝4549}

5051

intmain()

5267

68 cn=bestn=0

;69 dfs(1

);70 printf("

%d\n

",bestn);

71for (i=1; i<=p; i++)

72if

(bestx[i])

73 printf("

%d "

,i);

74 printf("\n"

);75}76

77return0;

78}7980

/*81182

5 783

1 284

1 485

1 586

2 387

2 588

3 589

4 590

*/

poj 1419 最大獨立集

題目大意 乙個無向圖中,使用黑白兩種顏色對頂點著色,要求相鄰頂點不能同時為黑色,求最大能染黑色頂點數量以及對應頂點。解題思路 相鄰頂點間有邊相連,模型轉換成求 無向圖 最大獨立集。因為是np問題,目前沒有有效演算法。又 最大團頂點數量 補圖的最大獨立集 所以我們可以用 優化的 bron kerbos...

樹的最大獨立集

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 由於每個點只由其兒子或者孫子決定 二者的最大值 所以我們可以深搜一遍,回溯的時候用當前節點更新其父親以及父親的父親 因為此時該節點的值已經被我們計算出來了 這種由已知貢獻給未知的方法稱為刷...