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;
}
QuickFix Java 讲解(一)概述、下载方法,和协议内容 本系列力求手把手教你怎样利用QuickFix Java 搭建自己的 FIX 协议收法平台,以及其中的注意事项。 所有源码的地址(免费): https://github.com/zongzhec/QuickFixPractise 1. 什么是FIX,QuickFix,Quick Java? 1.1. 什么是FIX 官网以及其他翻译自官网的帖子都太官方了,这里我们设想一个情景: 你是一个交易员,现在客户打电话来让你下个单买点股票。你啪啪啪的在你的机器上熟练地输入了下单指令。系统显示:成... 阅读详情

相关推荐

避坑指南:你的VASP CI-NEB计算为什么不收敛?常见错误分析与解决思路

本文深入解析VASP CI-NEB计算不收敛的常见问题,提供从结构准备到参数设置的系统解决方案。针对过渡态计算中的能量曲线异常、中间图像偏离等典型问题,详细介绍了诊断方法和实用工具,帮助研究者高效解决CI-NEB收敛难题,提升计算效率。

weixin_29698641的博客 431

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

拆开华为BBU5900,看看5G基站的大脑里到底装了啥?

本文深度拆解华为BBU5900,揭示5G基站核心处理单元的硬件架构与设计哲学。通过详细解析模块化设计、智能电源系统和动态散热方案,展现其支撑千兆速率、毫秒级时延的技术奥秘,为5G网络部署提供实用参考。

weixin_31456563的博客 562

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

FAST-LIO2:论文和算法解析

本文介绍了FAST-LIO2算法:一种快速、鲁棒、通用的激光雷达-惯性里程计框架。FAST-LIO2基于高效的紧密耦合迭代卡尔曼滤波器,具有两个关键的新颖之处,可实现快速,稳健和准确的激光雷达导航(和测绘)。第一种方法是直接将原始点注册到地图上然后更新地图,而不提取特征。这样可以利用环境中的细微特征,从而提高准确性。消除手工设计的特征提取模块,也使其能够适应不同扫描模式的新兴激光雷达;

超爱吃小蛋糕的66的博客 1万+

百度飞桨+文心大模型实战:生成式AI工程师认证备考全攻略(含真题解析)

本文详细解析百度飞桨与文心大模型结合的生成式AI工程师认证备考策略,涵盖认证体系、学习路径、核心技能突破及真题分析。帮助开发者掌握大模型原理、飞桨平台操作和文心大模型应用,高效通过工信部与百度联合认证考试。

loss4bartender的博客 682

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

别再找在线API了!用C#调用微信电脑版自带的OCR,本地识别又快又准

本文详细介绍了如何利用C#调用微信电脑版内置的OCR引擎实现本地文字识别,解决传统云端API的隐私和网络依赖问题。微信OCR具备高精度中文识别、完全离线运行和零成本接入三大优势,特别适合企业文档电子化处理。通过实战代码演示了核心交互逻辑、批量处理流水线和表格数据提取等高级应用场景。

weixin_29295541的博客 588

最大团问题hdu1530

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

FlyingJack 245

图神经网络与大模型融合的理论综述:架构、机制与未来方向

然而,它们普遍缺乏对图结构数据的原生支持,无法直接处理边、节点之间的拓扑关系,这限制了其在关系密集型任务中的表现 [23]。2020年发布的BERT [16] 开启了自监督预训练时代,而2021年后,T5 [17]、PaLM [18]、LLaMA [19] 等模型相继推出,参数规模突破千亿级,展现出惊人的上下文学习(In-context Learning)与链式推理(Chain-of-Thought)能力 [20]。例如,将医学影像作为图节点,结合病理报告文本,实现更精准的疾病诊断 [58]。

andeyeluguo的博客 295

SI案例分享--FPC(柔性电路板)信号仿真

设计高性能的柔性PCB时,由于采用了网格地的参考面构造,因此,需要按照特定的结构进行布局,才可以保证所需目标阻抗的稳定性,该结构的配置过程称为“Hatch Configuration”,合理的参数配置将有助于得到满意的设计效果。

一只豌豆象的博客 2826

最大团问题

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

ThingsBoard 场景联动需求

当初有个兄弟请我帮他实现一个需求,需求如上,很简单,实现完成后我怕他操作不来,又写了这份文档给他,今天把这个文档的场景发出来,大家也可以学习一下思路我把需要模拟设备的指令都总结在下面,连接参数截图讲解如下:温度传感器风扇光照传感器灯。

AldrichEugene 1232

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

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

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

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

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

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

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、付费专栏及课程。

余额充值