HDU 1530 Maximum Clique 最大团

【最大团】【HDU1530】【Maximum Clique】 先上最大团定义: 最大团问题(Maximum Clique Problem, MCP)是图论中一个经典的组合优化问题,也是一类NP完全问题,在国际上已有广泛的研究,而国内对MCP问题的研究则还处于起步阶段,因此,研究最大团问题具有较高的理论价值和现实意义。 最大团问题又称为最大独立集问题(Maximum Independent Set Problem)。启发式算法。确定性算 阅读详情
题意:给一个图,找图中的最大团,并输出最大团的顶点数。
思路:暴搜。dfs判断每个点在或者不在。加一个剪枝。就是如果剩下的节点+当前已经搜到的最大团的节点<=已经找到的最好结果,就停止搜索。这个剪枝效率蛮低的。 3510ms过的。

http://acm.hdu.edu.cn/showproblem.php?pid=1530

/*********************************************
    Problem : HDU 1530
    Author  : NMfloat
    InkTime (c) NM . All Rights Reserved .
********************************************/

#include <map>
#include <set>
#include <queue>
#include <stack>
#include <cmath>
#include <ctime>
#include <cstdio>
#include <vector>
#include <cstring>
#include <cstdlib>
#include <iostream>
#include <algorithm>

#define rep(i,a,b)  for(int i = (a) ; i <= (b) ; i ++) //遍历
#define rrep(i,a,b) for(int i = (b) ; i >= (a) ; i --) //反向遍历
#define repS(it,p) for(auto it = p.begin() ; it != p.end() ; it ++) //遍历一个STL容器
#define repE(p,u) for(Edge * p = G[u].first ; p ; p = p -> next) //遍历u所连接的点
#define cls(a,x)   memset(a,x,sizeof(a))
#define eps 1e-8

using namespace std;

const int MOD = 1e9+7;
const int INF = 0x3f3f3f3f;
const int MAXN = 1e5+5;
const int MAXE = 2e5+5;

typedef long long LL;
typedef unsigned long long ULL;

int T,n,m;

int fx[] = {0,1,-1,0,0};
int fy[] = {0,0,0,-1,1};

int M[55][55];
int best; //搜出来最大的团大小
int B[55];
int A[55];

bool check(int num,int now) {
    rep(i,1,now) {
        if(!M[num][A[i]]) return false;
    }
    return true;
}

void dfs(int num,int x_x,int now) { //now需要跟随dfs
    if(num == n) {
        if(now > best) {
            best = now;
            rep(i,1,now) B[i] = A[i];
        }
        return ;
    }
    if((n-num + now) > best && check(num+1,now)) { //判断向num+1存在的方向搜索是不是可行的 
        A[++now] = num + 1;
        dfs(num+1,1,now);
        --now;
    }
    if((n-num-1 + now) > best) { //判断向num+1不存在的方向搜索是不是可行的
        dfs(num+1,0,now);
    }
}

void input() {
    rep(i,1,n) rep(j,1,n) scanf("%d",&M[i][j]);
}

void solve() {
    best = 0 ; 
    dfs(0,0,0);
    printf("%d\n",best);
    // rep(i,1,best) printf("%d ",B[i]);
    // puts("");
}

int main(void) {
    //freopen("a.in","r",stdin);
    while(scanf("%d",&n),n) {
        input();
        solve();
    }
    return 0;
}
网上学到的一个版本 2000ms以下,快了1000+ms。
/*********************************************
    Problem : HDU 1530
    Author  : NMfloat
    InkTime (c) NM . All Rights Reserved .
********************************************/

// 要求 图是无向的

#include <map>
#include <set>
#include <queue>
#include <stack>
#include <cmath>
#include <ctime>
#include <string>
#include <cstdio>
#include <vector>
#include <cstring>
#include <cstdlib>
#include <iostream>
#include <algorithm>

#define rep(i,a,b)  for(int i = (a) ; i <= (b) ; i ++) //遍历
#define rrep(i,a,b) for(int i = (b) ; i >= (a) ; i --) //反向遍历
#define repS(it,p) for(auto it = p.begin() ; it != p.end() ; it ++) //遍历一个STL容器
#define repE(p,u) for(Edge * p = G[u].first ; p ; p = p -> next) //遍历u所连接的点
#define cls(a,x)   memset(a,x,sizeof(a))
#define eps 1e-8

using namespace std;

const int MOD = 1e9+7;
const int INF = 0x3f3f3f3f;
const int MAXE = 2e5+5;

typedef long long LL;
typedef unsigned long long ULL;

const int MAXN = 55;

int T,n,m;

int fx[] = {0,1,-1,0,0};
int fy[] = {0,0,0,-1,1};

int M[MAXN][MAXN];
int dp[MAXN];
int best;

bool dfs(int * id,int top,int cnt) { 
    //id是和当前点有连接的数组,top是这个数组的长度,cnt已经找到的最大团的大小
    //id数组从1到n
    if(!top) { //dfs的结束标志
        if(best < cnt) {
            best = cnt ;
            return true; //代表这次搜索更新了结果
        }
        return false;
    }
    int a[MAXN];
    rep(i,1,top) {
        if(cnt+top-i+1<=best) return false; 
        //(top-1)-i+1是后继节点生效的个数 因为i是从0开始的 , top-i是在逐渐减少的,所有不用考虑后面的状态
        if(cnt+dp[id[i]]<=best) return false; 
        //cnt现在找到的最大团的个数 + dp[id[i]] , dp[id[i]] 是以id[i]开头最大的最大团个数
        //如果cnt+dp[id[i]]<=best就没有搜索的必要了 , 因为dp[id[i+k]] (k >= 1) 必然 <=dp[id[i]];
        int lan = 0;
        rep(j,i+1,top) if(M[id[i]][id[j]]) a[++lan] = id[j]; 
        //有多少个点和id[i]这个点是连接 , a数组是不能预处理的,因为id[]是不确定的  
        if(dfs(a,lan,cnt+1)) return true;
        //因为每一次搜索最多只会让最大独立团的个数+1,所以如果更新过一次,就不用继续搜了。
    }
    return false;
}

int max_clique() {
    int id[MAXN];
    best = 0;
    rrep(i,1,n) {
        int top = 0;
        rep(j,i+1,n) if(M[i][j]) id[++top] = j;
        dfs(id,top,1);
        dp[i] = best;
    }
    return best;
}

void input() {
    rep(i,1,n) rep(j,1,n) scanf("%d",&M[i][j]);    
}

void solve() {
    printf("%d",max_clique());
    puts("");
}

int main(void) {
    //freopen("a.in","r",stdin);
    while(scanf("%d",&n),n) {
        input();
        solve();
    }
    return 0;
}
vasp算表面吸附流程_VASP表面吸附计算实例分析 本文主要为了记录在学习Vasp计算过程中如何设置INCAR中的一些参数,并不着重讲解其含义,详见可自行到vasp官网查阅。其次关于建模部分也不做细致讨论,一般结构可从Materials Studio里自带的晶体数据库导出,或从三大数据库网站上下载:1、Materaials Project网址:https://materialsproject.org/(强烈推荐,邮箱注册即可使用)2、CCDC网址:... 阅读详情

相关推荐

在mac OS下安装SQL Developer

最近一直在折腾Oracle数据库,但由于电脑是mac系统,plsql developer用不了,远程管理一直不是很方便。后来听说Navicat不错,就也装了个试试看,发现界面看起来确实不错。今天心血来潮,想试试oracle自己开发的client。用惯plsql developer的人也可以来试试看,毕竟是自己人开发的,兼容性应该会不错吧。下面就把安装过程分享给新手或者需要帮助的朋友。 1.

bonbonboo的专栏 2万+

HDU-1530 Maximum Clique (最大团问题)

Maximum Clique Given a graph G(V, E), a clique is a sub-graph g(v, e), so that for all vertex pairs v1, v2 in v, there exists an edge (v1, v2) in e. Maximum clique is the clique that has maximum number of vertex. Input Input contains multiple tests. For ea

qq_45860254的博客 575

解决相同型号USB设备在Windows系统中重复枚举问题

本文详细解析了Windows系统中相同型号USB设备重复枚举问题的成因及解决方案。通过修改注册表、使用PsTools工具清除设备记录以及编程实现自动化处理等方法,有效解决设备识别混乱问题,特别适用于自动化测试和工业设备管理场景。

weixin_42561040的博客 565

hdu-1530-Maximum Clique-找最大团

按照每个团包含节点字典序递增的顺序搜索  不用怎么剪枝 4s能过 #include #include #include #include #include #include #include #include #include using namespace std; int mp[55][55]; int set[55]; int ans=0; int dp[55

缺氧 665

SPL06气压温度传感器SPI驱动与补偿算法详解

气压传感器与温度传感器是嵌入式环境感知系统的核心组件,其测量精度高度依赖于MEMS芯片的校准参数与非线性补偿机制。SPL06作为集成式高精度数字传感器,采用24位Σ-Δ ADC与片内补偿引擎,需结合唯一出厂校准系数(即‘芯片指纹’)进行多阶数学修正,才能将原始ADC值转化为符合计量要求的帕斯卡(Pa)与摄氏度(℃)物理量。该过程涵盖SPI通信协议解析、寄存器时序控制、大端数据拼接、二进制补码处理及浮点/定点混合运算等典型嵌入式工程实践。广泛应用于无人机高度计、智能穿戴海拔监测与IoT气象终端中。

weixin_34640289的博客 143

VMware Workstation Pro 25H2 去虚拟化精简便携版完全指南

虚拟机技术在现代开发和测试环境中扮演着重要角色,但客户机系统常因暴露虚拟化特征而被特定软件识别为“虚拟机”,导致功能受限。同时,官方 VMware Workstation Pro 安装包体积大、安装流程繁琐,难以实现移动化部署。去虚拟化通过修改 VMX 配置、屏蔽 CPUID 特征、反射宿主机硬件信息等手段降低被检测概率;精简与便携则通过裁剪非核心文件和改用脚本注册服务,实现即解压即用的轻量化形态。这类改版方案特别适合临时环境搭建、敏感软件兼容测试以及构建随身开发环境。本文从虚拟化检测原理出发,系统梳理了

weixin_34068198的博客 376

hdu 1530 Maximum Clique (最大包)

Maximum CliqueTime Limit: 20000/10000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 5380 Accepted Submission(s): 2776 Problem DescriptionGiven a graph G(V,...

devon2014的博客 176

[WeChatMsg]导出csv格式微信聊天记录的手把手教程

手把手教大家如何导出自己的聊天记录得到csv文件,即使是电脑小白也可以轻松学会o(* ̄▽ ̄*)ブ

weixin_51094633的博客 1万+

最大团问题hdu1530

HDU1530 题解 基础:我们令cnum[i]表示点i到n中的最大团大小,则有cnum[i] = cnum[i + 1] 或cnum[i + 1] + 1,也就是说具有单调性(类似于DP),这样我们可以利用这个性质进行剪枝,有点类似于二分图增广路,倒着每次添加一个点i,看看能否形成更优的答案,如果形成了,那么直接return就好了。另外选点的时候,顺着按下标从小到大选,这样可以避免枚举一些重...

FlyingJack 245

ESP32设备驱动-TB6612FNG直流电机驱动

TB6612FNG 是一款出色的双电机驱动器,非常适合将两个小型直流电机(例如微型金属齿轮电机)连接到微控制器,它还可以用于控制单个双极步进电机。 基于 MOSFET 的 H 桥比 L298N 和 Sanyo 的 LB1836M 等旧式驱动器中使用的基于 BJT 的 H 桥效率高得多,后者允许将更多电流输送到电机,而从逻辑电源汲取的电流更少 (对于真正低电压的应用,LB1836 仍然具有 TB6612 的优势)。

视觉与物联智能 3402

Eclipse邂逅Deepseek:本地化部署全攻略

通过前面一系列的步骤,我们成功地在 Eclipse 中完成了 Deepseek 的本地化部署,并且对部署后的功能进行了测试和优化,还解决了可能遇到的一些常见问题。这一过程不仅让我们体验到了将强大的大语言模型与高效的开发环境相结合的魅力,也为我们在软件开发过程中带来了诸多便利。本地化部署 Deepseek 到 Eclipse,使得我们在代码编写过程中能够获得智能的代码补全和精准的问答支持,大大提高了开发效率。同时,本地化部署保障了数据的安全性和隐私性,避免了数据在传输过程中可能面临的风险。

远程部署调试 运行安装 项目调试 二次开发 项目技术新 持续迭代 部分源码免费分享 4515

最大团问题

1.定义: 其中,形式参数t表示第t个顶点,Place(t)用来判断第t个顶点能否放入团里。二维数组a[][]是图的邻接矩阵。一维数组x[]记录当前解。搜索到第t层时,从第1 个顶点用第t-1个顶点的状态存放入在x[1:t-1]中;一维数组bestx记录当前最优解,变量cn,bestcn分别记录当前已包含在团里面的顶点个数和当前最优解包含在团里面的顶点个数,初始化都为0。 #include<iostream> #include<algorithm> #include<cst

Keep_Trying_Go的博客 687

YOLOv9改进策略目录 | 包含卷积、主干、检测头、注意力机制、Neck上百种创新机制

Hello,各位读者们好本专栏自开设两个月以来已经更新改进教程50余篇其中包含RepNCSPELAN4、主干、检测头、注意力机制、Neck多种结构上创新,也有损失函数和一些细节点上的创新。同时本人一些讲解视频和包含我所有创新的YOLOv9文档并不能在优快云上传(所有的创新点都经过我的测试是可用的,得到该文件之后大家可以随意组合使用),所以会建立群的形式在内上传我的文件和视频我也会在群内不定期和大家交流回答大家问题,同时定期会更新一些文章的创新点(经过我融合测试后的,先到先得)。

Snu77的博客 1万+

HDU 1530 Maximum Clique【最大团问题】

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1530Maximum CliqueProblem Description Given a graph G(V, E), a clique is a sub-graph g(v, e), so that for all vertex pairs v1, v2 in v, there exists an e...

小康的博客 731

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

hdu 1530 Maximum Clique——最大团

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1530 参考博客:http://blog.youkuaiyun.com/yjpYJP2014/article/details/52590161?locationNum=13&fps=1     http://www.cnblogs.com/zhj5chengfeng/archive/2013/07/29/322

溪边自有舞雩风 435

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

HDU【1530】Maximum Clique(最大团)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1530 分析 这道题求的是最大团,可以用回溯法来做。 #include<iostream> #include<cstdio> #include<cstring> using namespace std; #define N 100 + 10 int a[N][N],i...

yj8023xx的博客 308

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

hdu1530 Maximum Clique(求最大团模板题)

Link:http://acm.hdu.edu.cn/showproblem.php?pid=1530 Maximum Clique Time Limit: 20000/10000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 3142    Accepted Su

林下的码路 1307

HDU 1530 Maximum Clique (最大团)

题意:给出无向图,求最大团的结点数。 题解:最大团 团:若图是一个团,则该图是无向图。 极大团:不是其他团的子集。 最大团:结点数最多的团。 #define _CRT_SECURE_NO_WARNINGS #include<iostream> #include<cstdio> #include<string> #include<cstring> #include<algorithm> #include<queue> #include&l

gongyuandaye的博客 212

[HDU 1530] Maximum Clique 最大团

http://acm.hdu.edu.cn/showproblem.php?pid=1530题意:以邻接矩阵方式输入一个图,求图的最大完全子图。思路:最大团,狠暴力的算法。

AcmHonor的专栏 790

HDU 1530 Maximum Clique 图论最大团问题

Maximum Clique Time Limit: 20000/10000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 2802    Accepted Submission(s): 1483 Problem Description Given a graph

小人物的草稿本 1872

hdu - 1530 Maximum Clique 最大团模板

给定无向图G=(V,E),其中V是非空集合,称为顶点集;E是V中元素构成的无序二元组的集合,称为边集,无向图中的边均是顶点的无序对,无序对常用圆括号“( )”表示。 如果U  V,且对任意两个顶点u,v∈U有(u,v)∈E,则称U是G的完全子图。G的完全子图U是G的团。G的最大团是指G的最大完全子图。 如果U∈V且对任意u,v∈U有(u,v)不属于E,则称U是G的空子图。G的空子图U是G的独立...

陌离将离 349

HDU1530 Maximum Clique 最大团(最大完全子图)

http://acm.hdu.edu.cn/showproblem.php?pid=1530 Problem Description Given a graph G(V, E), a clique is a sub-graph g(v, e), so that for all vertex pairs v1, v2 in v, there exists an edge (v1, ...

lanshan1111的博客 361

【HDU】1530Maximum Clique(求最大团,模板题目)

Time Limit: 20000/10000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 5719    Accepted Submission(s): 2927   Problem Description Given a graph G(V, E)...

红点雷龙XL 335

【HDU - 1530】Maximum Clique(最大团问题,图论)

题干: Given a graph G(V, E), a clique is a sub-graph g(v, e), so that for all vertex pairs v1, v2 in v, there exists an edge (v1, v2) in e. Maximum clique is the clique that has maximum number of verte...

xuanweiace的博客 776

HDU1530 Maximum Clique (最大团)

最大团的定义可以百度。。 最大团的做法 (侵删: 暴力: 定义一个集合U用于存放完全子图 初始化:        从一个点 u 开始,把这个点加入到一个集合中,设为 U。遍历一遍所有和他相连的点,把他们放入另一个集合 S1 中,接下来进行第一遍 DFS     第一遍 DFS :        从 S1 中选择一个点 u1,这个点肯定和集合 U 中的任何一个点相连

1988的博客 646

HDU 1530 Maximum Clique 简单的最大团模板题

题意:给你一个无向图,求他的最大团。 想法:很简单的模板题。 #include #include #include using namespace std; int n; int map[55][55],cn,maxt,mark[500]; void dfs(int x) { if(x>n) { maxt=cn; return;

猫ER 1116
上一篇: HDU 1507 Uncle Tom's Inherited Land* 二分图最大匹配
下一篇: HDU 1435 Stable Match 稳定婚姻
_NMfloat_
博客等级 码龄12年 7粉丝 315原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值