zoukankan      html  css  js  c++  java
  • 独立树Graph Coloring&&http://poj.org/problem?id=1419最大团问题

    在改章节中,我们主要介绍独立树的内容,自我感到有个不错的建议和大家分享下

        许久没做题了,做起题来感到各种没感到,简直弱爆了,

        先说下这一题题意:就是给你一个无向图,有彩色两种颜色,让你对该图停止染色,求要意任相邻两点不能为一同种颜色,问你最后可以染多少个玄色的点顶,很显然是让你求最大独立集问题(所求得的该点顶中集意任两点都没有边),而经分析可知最大独立集=相对应完全图补图的最大团

        而求最大团很易容想到用子集树来求,需只带一下子集树的板模就好了·~~

        AC码代:

        每日一道理
    只有启程,才会到达理想和目的地,只有拼搏,才会获得辉煌的成功,只有播种,才会有收获。只有追求,才会品味堂堂正正的人。
    #include <iostream>
    #include<string.h>
    #include<algorithm>
    #include<cstdio>
    #define CLR(arr,val) memset(arr,val,sizeof(arr))
    #define N 105
    using namespace std;
    bool map[N][N];
    int n,best[N];
    bool x[N];
    int Maxnum;
    void in(int &a)
    {
        char ch;
        while((ch=getchar())<'0'||ch>'9');
        for( a=0;ch>='0'&&ch<='9';ch=getchar()) a=a*10+ch-'0';
    
    }
    bool place(int t)
    {
        for(int i=1;i<t;++i)
        if(x[i]&&!map[i][t]) return false;
        return true;
    }
    void dfs(int t,int num)
    {
        if(t>n)//边界条件
        {
            Maxnum=num;
            int k=0;
            for(int i=1;i<=n;++i)
             if(x[i]) best[++k]=i;
            return;
        }
        if(place(t))//约束条件
        {
            x[t]=true;
            dfs(t+1,num+1);
        }
        if(num+n-t>=Maxnum) //限界条件
        {  
            x[t]=false;
            dfs(t+1,num);
        } 
    
    }
    int main()
    {
        int T;
        in(T);
        while(T--)
        {
           Maxnum=0;
           CLR(x,false);
           int k;
          in(n),in(k);
          for(int i=1;i<=n;++i)
           for(int j=1;j<=n;++j)
             map[i][j]=true;
             for(int i=0;i!=k;++i)
             {
                 int a,b;
                 in(a),in(b);
                 map[a][b]=map[b][a]=false;
             }
            dfs(1,0);
            cout<<Maxnum<<endl;
            for(int i=1;i<Maxnum;++i) cout<<best[i]<<" ";
            cout<<best[Maxnum]<<endl;
            }return 0;
    }

    文章结束给大家分享下程序员的一些笑话语录: 一个合格的程序员是不会写出 诸如 “摧毁地球” 这样的程序的,他们会写一个函数叫 “摧毁行星”而把地球当一个参数传进去。

  • 相关阅读:
    java基本类型和引用做形参传递
    新阶段新开始
    给网页中的button加动画效果
    数组对象常用的几个函数总结
    微信小程序使用页面栈改变上一页面的数据
    pc端和移动端的“窗口”(viewport)故事(part1)
    js的for循环中出现异步函数,回调引用的循环值总是最后一步的值?
    macOS Sierra 如何安装任何来源的软件
    Box-shadow制作漂亮的外阴影输入框
    button标签与input type=button标签使用的差异
  • 原文地址:https://www.cnblogs.com/xinyuyuanm/p/3038612.html
Copyright © 2011-2022 走看看