码迷,mamicode.com
首页 > 其他好文 > 详细

【POJ 1419】Graph Coloring

时间:2015-07-28 13:14:30      阅读:129      评论:0      收藏:0      [点我收藏+]

标签:最大团   最大独立集   

【POJ 1419】Graph Coloring

求图的最大独立集 最大独立集=补图最大团
很适合理解最大团/最大独立集的模板题
建立补图套模板既可 需要输出集合点 原本想用stack 但发现copy比较麻烦 vector用一个iterator指针 循环很便利

代码如下:

#include <iostream>
#include <cstdlib>
#include <cstdio>
#include <cstring>
#include <vector>

using namespace std;

bool mp[111][111];
int link[111][111],dp[111],mx;
vector <int> s,ss;

void dfs(int n,int num,int step)
{
    int i,j,k,cnt;
    if(num == 0)
    {
        if(mx < step)
        {
            s.clear();
            vector<int>::iterator it = ss.begin();
            for(;it != ss.end(); ++it)
                s.push_back(*it);
            mx = step;
        }
        return;
    }
    for(i = 0; i < num; ++i)
    {
        cnt = 0;
        k = link[step][i];
        if(step + n - k <= mx) return;
        if(step + dp[k] <= mx) return;
        for(j = i+1; j < num; ++j) if(mp[link[step][j]][k]) link[step+1][cnt++] = link[step][j];
        ss.push_back(k);
        dfs(n,cnt,step+1);
        ss.pop_back();
    }
}

int GetMax(int n)
{
    int i,j,sz;
    mx = 0;
    for(i = n; i >= 1; --i)
    {
        sz = 0;
        for(j = i+1; j <= n; ++j) if(mp[i][j]) link[1][sz++] = j;
        ss.push_back(i);
        dfs(n,sz,1);
        ss.pop_back();
        dp[i] = mx;
    }
    return mx;
}

int main()
{
    int t,n,m,u,v,i;
    scanf("%d",&t);
    while(t--)
    {
        memset(mp,true,sizeof(mp));
        scanf("%d %d",&n,&m);
        while(m--)
        {
            scanf("%d %d",&u,&v);
            mp[u][v] = mp[v][u] = false;
        }
        for(i = 1; i <= n; ++i) mp[i][i] = false;
        printf("%d\n",GetMax(n));
        vector <int> ::iterator it = s.begin();
        for(; it+1 != s.end(); ++it)
            printf("%d ",*it);
        printf("%d\n",*it);
    }
    return 0;
}

版权声明:本文为博主原创文章,未经博主允许不得转载。

【POJ 1419】Graph Coloring

标签:最大团   最大独立集   

原文地址:http://blog.csdn.net/challengerrumble/article/details/47101897

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!