題目大意:
乙個無向圖中,使用黑白兩種顏色對頂點著色,要求相鄰頂點不能同時為黑色,求最大能染黑色頂點數量以及對應頂點。
解題思路:
相鄰頂點間有邊相連,模型轉換成求 無向圖 最大獨立集。因為是np問題,目前沒有有效演算法。
又 最大團頂點數量 = 補圖的最大獨立集
所以我們可以用 優化的 bron-kerbosch算求其補圖的最大團,然後得出當前圖的最大獨立集
view code
#include#include#define n 1010
bool
flag[n], a[n][n];
intans, cnt[n], group[n], n, m, vis[n];
bool dfs( int u, int
pos )
}}
if( pos >ans )
return0;
} void
maxclique()
}int
main()
for(int i = 1; i <= n; i++)
for(int j = 1; j <= n; j++)
if( i == j ) a[i][j] = 0
;
else a[i][j] ^= 1
; maxclique();
if( ans < 0 ) ans = 0
; printf(
"%d\n
", ans );
for(int i = 0; i < ans; i++)
printf( i == 0 ? "
%d" : "%d"
, group[i] );
if( ans > 0 ) puts(""
); }
}
poj1419 染色 最大獨立集
題意 經典的圖的染色問題,求對於給定的無向圖中,給每個結點染兩種不同顏色 黑色和白色 的一種且相鄰結點的顏色不同,求染成黑色的最多結點數。分析 這個題求的圖的最大獨立集,最大獨立集即為黑色節點的個數。由於原圖的最大獨立集 補圖的最大團。而這個題是普通圖,所以用回溯法來做,時間複雜度o n 2 n v...
樹的最大獨立集
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 由於每個點只由其兒子或者孫子決定 二者的最大值 所以我們可以深搜一遍,回溯的時候用當前節點更新其父親以及父親的父親 因為此時該節點的值已經被我們計算出來了 這種由已知貢獻給未知的方法稱為刷...