poj 1419 Graph Coloring

http://poj.org/problem?id=1419

题意:

一张图黑白染色,相邻点不能都染黑色,最多能染几个黑色点

最大点独立集

但是图不能同构为二分图,不能用二分图匹配来做

那就爆搜吧

还可以转化为补图的最大团问题

#include<cstdio>
#include<cstring>
#include<iostream>

using namespace std;

bool map[101][101];
int color[101],res[101];

int n,ans,cnt;

void read(int &x)
{
    x=0; char c=getchar();
    while(!isdigit(c)) c=getchar();
    while(isdigit(c)) { x=x*10+c-‘0‘; c=getchar(); }
}

bool can(int s)
{
    for(int i=1;i<=n;++i)
    {
        if(map[s][i] && color[i]==1) return false;
    }
    return true;
}

void dfs(int p)
{
    if(p>n)
    {
        ans=cnt;
        int k=0;
        for(int i=1;i<=n;++i)
        {
            if(color[i]==1) res[++k]=i;
        }
        return;
    }
    if(cnt+n-p+1<=ans) return;
    if(can(p))
    {
        cnt++;
        color[p]=1;
        dfs(p+1);
        cnt--;
    }
    color[p]=2;
    dfs(p+1);
}

int main()
{
    int T;
    read(T);
    int m,x,y;
    while(T--)
    {
        read(n); read(m);
        memset(map,false,sizeof(map));
        memset(color,0,sizeof(color));
        while(m--)
        {
            read(x); read(y);
            map[x][y]=map[y][x]=true;
        }
        ans=cnt=0;
        dfs(1);
        cout<<ans<<‘\n‘;
        for(int i=1;i<ans;++i) cout<<res[i]<<‘ ‘;
        cout<<res[ans]<<‘\n‘;
    }
}

Graph Coloring

Time Limit: 1000MS   Memory Limit: 10000K
Total Submissions: 5384   Accepted: 2515   Special Judge

Description

You are to write a program that tries to find an optimal coloring for a given graph. Colors are applied to the nodes of the graph and the only available colors are black and white. The coloring of the graph is called optimal if a maximum of nodes is black. The coloring is restricted by the rule that no two connected nodes may be black.

 
Figure 1: An optimal graph with three black nodes

Input

The graph is given as a set of nodes denoted by numbers 1...n, n <= 100, and a set of undirected edges denoted by pairs of node numbers (n1, n2), n1 != n2. The input file contains m graphs. The number m is given on the first line. The first line of each graph contains n and k, the number of nodes and the number of edges, respectively. The following k lines contain the edges given by a pair of node numbers, which are separated by a space.

Output

The output should consists of 2m lines, two lines for each graph found in the input file. The first line of should contain the maximum number of nodes that can be colored black in the graph. The second line should contain one possible optimal coloring. It is given by the list of black nodes, separated by a blank.

Sample Input

1
6 8
1 2
1 3
2 4
2 5
3 4
3 6
4 6
5 6

Sample Output

3
1 4 5
时间: 2024-10-11 07:29:32

poj 1419 Graph Coloring的相关文章

poj 1419 Graph Coloring_最大独立集

题目链接 题意:给出你一个无向图,然后对其中的点去上色, 只能上黑色和白色,要求是黑色点不能相邻,问最多能上多少黑色的顶点. 思路:点独立集:设无向图G=<V,E>,顶点集合V'是V的子集,若V'中的任意两个顶点都不相邻,则称V'为G的点独立集 这题求的是最大独立集 还有一个定理是最大独立集=补图的最大团 最大团=补图的最大独立集 #include<stdio.h> #include<string.h> #define MAXN 100 int n,map[MAXN][

【POJ 1419】Graph Coloring

[POJ 1419]Graph Coloring 求图的最大独立集 最大独立集=补图最大团 很适合理解最大团/最大独立集的模板题 建立补图套模板既可 需要输出集合点 原本想用stack 但发现copy比较麻烦 vector用一个iterator指针 循环很便利 代码如下: #include <iostream> #include <cstdlib> #include <cstdio> #include <cstring> #include <vecto

Graph Coloring(最大独立集模板题)

Graph Coloring POJ - 1419 You are to write a program that tries to find an optimal coloring for a given graph. Colors are applied to the nodes of the graph and the only available colors are black and white. The coloring of the graph is called optimal

193 - Graph Coloring(DFS)

题目:193 - Graph Coloring 题目大意:给出一个图,图里面有点和边,要求相邻的点不可以都是黑色的,问怎样上色黑色的点最多的,给出字典序最大的那种组合情况. 解题思路:dfs每个点是黑是白,将黑的点保存记录下来,然后下次再试探某个点是黑点的时候,就看看这个点和之前的那些点有没有相邻,相邻就表示这个点不是黑点.每个试探的点只需要是这个点之后的点就可以了,因为前面的点已经试探过了. 代码: #include <stdio.h> #include <string.h> c

POJ1419 Graph Coloring(最大独立集)(最大团)

Graph Coloring Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 4926   Accepted: 2289   Special Judge Description You are to write a program that tries to find an optimal coloring for a given graph. Colors are applied to the nodes of the

(最大团) poj 1419

Graph Coloring Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 4370   Accepted: 1980   Special Judge Description You are to write a program that tries to find an optimal coloring for a given graph. Colors are applied to the nodes of the

UVA Graph Coloring

主题如以下: Graph Coloring  You are to write a program that tries to find an optimal coloring for agiven graph. Colors are applied to the nodes of the graph and the only availablecolors are black and white. The coloring of the graph is called optimalif a

uva 193 Graph Coloring(回溯)

uva 193 Graph Coloring You are to write a program that tries to find an optimal coloring for a given graph. Colors are applied to the nodes of the graph and the only available colors are black and white. The coloring of the graph is called optimal if

GPS-Graph Processing System Graph Coloring算法分析 (三)

Graph coloring is the problem of assigning a color to each vertex of an undirected graph such that no two adjacent vertices have the same color. We implement the greedy algorithm from Scalable parallel graph coloring algorithms. The algorithm iterati