首页 > 代码库 > 【poj1419】 Graph Coloring
【poj1419】 Graph Coloring
http://poj.org/problem?id=1419 (题目链接)
题意
求一般图最大独立集。
Solution
最大独立集=补图的最大团。
代码
// poj1419#include<algorithm>#include<iostream>#include<cstring>#include<cstdlib>#include<cstdio>#include<cmath>#include<queue>#define LL long long#define inf 2147483640#define Pi acos(-1.0)#define free(a) freopen(a".in","r",stdin),freopen(a".out","w",stdout);using namespace std; const int maxn=200;int f[maxn][maxn],c[maxn][maxn],p[maxn],ans[maxn],mx[maxn];int n,m,cnt;void Init() { memset(f,1,sizeof(f));cnt=0; for (int i=1;i<=n;i++) c[0][i]=1;}void record(int s) { cnt=s; for (int i=1;i<=s;i++) ans[i]=p[i];}void dfs(int fa,int x,int s) { if (n-x+s<cnt || s+mx[x+1]<cnt) return; //cut p[s]=x; if (cnt<s) record(s); for (int i=x+1;i<=n;i++) if (c[fa][i] && f[x][i]) c[x][i]=1; for (int i=x+1;i<=n;i++) if (c[fa][i] && f[x][i]) dfs(x,i,s+1); for (int i=x+1;i<=n;i++) c[x][i]=0;}int main() { int T;scanf("%d",&T); while (T--) { scanf("%d%d",&n,&m); Init(); for (int u,v,i=1;i<=m;i++) { scanf("%d%d",&u,&v); f[u][v]=f[v][u]=0; } for (int S=n;S>=1;S--) { //倒着搜索 dfs(0,S,1); mx[S]=cnt; //记忆化一下 } printf("%d\n",cnt); for (int i=1;i<=cnt;i++) printf("%d ",ans[i]); puts(""); } return 0;}
【poj1419】 Graph Coloring
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。