syhd142 |
|
|||
日歷
統(tǒng)計
導(dǎo)航常用鏈接留言簿(2)隨筆檔案(23)文章分類(270)
文章檔案(122)我的豆瓣搜索最新評論
閱讀排行榜
評論排行榜 |
看著人家的代碼寫就是不好,還錯了好幾次,雖說簡單還是自己靠得住。雖然可以用最大團求解,但直接枚舉就好了。 規(guī)模小,看這個題就知道是求最大獨立集,而最大獨立集+最小覆蓋集=定點個數(shù),而原圖最大團=補圖最大獨立集。各種性質(zhì)。 #include <stdio.h>
#include <string.h> #define N 105 bool g[N][N], color[N], mk[N]; int n, m, ans; bool ok(int u) { for(int i = 1; i <= n; i++) { if(g[u][i] && color[i]) return 0; } return 1; } void dfs(int u, int cnt) { if(u > n) { if(cnt > ans) { ans = cnt; for(int i = 1; i <= n; i++) mk[i] = color[i]; } return; } if(cnt + n - u + 1 <= ans) return; if(ok(u)) { color[u] = 1; dfs(u + 1, cnt + 1); color[u] = 0; } dfs(u + 1, cnt); } int main() { int t; scanf("%d", &t); while(t--) { ans = 0; memset(g, 0, sizeof(g)); memset(mk, 0, sizeof(mk)); memset(color, 0, sizeof(color)); scanf("%d %d", &n, &m); for(int i = 0; i < m; i++) { int a, b; scanf("%d %d", &a, &b); g[a][b] = g[b][a] = 1; } dfs(1, 0); printf("%d\n", ans); bool flag = 1; for(int i = 1; i <= n; i++) { if(mk[i]) { if(flag) flag = 0; else printf(" "); printf("%d", i); } } printf("\n"); } return 0; }
|
![]() |
|
Copyright © Fucker | Powered by: 博客園 模板提供:滬江博客 |