zoj1492 最大团

Maximum Clique


Time Limit: 10 Seconds      Memory Limit: 32768 KB


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 each test:

The first line has one integer n, the number of vertex. (1 < n <= 50)

The following n lines has n 0 or 1 each, indicating whether an edge exists between i (line number) and j (column number).

A test with n = 0 signals the end of input. This test should not be processed.

Output

One number for each test, the number of vertex in maximum clique.


Sample Input

5
0 1 1 0 1
1 0 1 1 1
1 1 0 1 1
0 1 1 0 1
1 1 1 1 0
0

Sample Output

4

模板题,学习一下模板。

#include<set>
#include<map>
#include<queue>
#include<stack>
#include<cmath>
#include<string>
#include<vector>
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#define INF 1000000001
#define MOD 1000000007
#define ll long long
#define lson l,m,rt<<1
#define rson m+1,r,rt<<1|1
#define pi acos(-1.0)
using namespace std;
const int MAXN = 55;
int mp[MAXN][MAXN],n,maxv[MAXN],ans,a[MAXN][MAXN];//maxv[]表示节点"i到n"能够构成的最大团节点个数、
                                                  //a[i][]表示i已经在最大团内的时候,还可能有多少个节点能够加入到最大团中。
int dfs(int cur,int x)//x指递归层数 也就是dfs树的层数 也就是最大团的节点个数
{
    if(cur == 0){
        if(x > ans){
            ans = x;
            return 1;
        }
        return 0;
    }
    for(int i = 0; i < cur; i++){
        if(cur - i + x <= ans)return 0;//假设集合x中的所有点都是在当前的团中 但是个数还是小于已知的值 不必处理
        int u = a[x][i];
        if(maxv[u] + x <= ans)return 0;//由于我们是从大到小求出答案的 所以这里u有可能之前已经求过。所以这时候可以减枝
                                       //maxv[u]说明后面所有可能的最大值已经不能比结果大了 不必在处理
        int num = 0;
        for(int j = i + 1; j < cur; j++){
            if(mp[u][a[x][j]])a[x+1][num++] = a[x][j];
        }
        if(dfs(num,x+1))return 1;//一旦找到值就可以返回 因为后面的点所含的点数只会越来越少
    }
    return 0;
}
void solve()
{
    ans = 0;
    memset(maxv,0,sizeof(maxv));
    for(int i = n; i >= 1; i --){
        int cur = 0;
        for(int j = i + 1; j <= n; j++){
            if(mp[i][j]){
                a[1][cur++] = j;
            }
        }
        dfs(cur,1);
        maxv[i] = ans;
    }
    printf("%d\n",ans);
}
int main()
{
    while(~scanf("%d",&n)){
        if(!n)break;
        for(int i = 1; i <= n; i++){
            for(int j = 1; j <= n; j++){
                scanf("%d",&mp[i][j]);
            }
        }
        solve();
    }
    return 0;
}
时间: 2024-10-08 02:09:04

zoj1492 最大团的相关文章

微信拼团商城怎么实现

什么叫拼团?一句话概括就是:大家一起买买买,同时享受大优惠.今年做得最火的微信拼团平台非"拼多多"莫属.拼多多商城通过微信拼团购物模式,让大家以折扣价买到商品,沉淀了大批忠诚用户. 微信拼团源码的拼团付款方式: 1.预付定金:设置预付定金为0:表示全款购买, 预付定金需要大于团长佣金;但如果选择的是阶梯团, 只能设置预付定金, 不能全款购买. 2.团长佣金:佣金是给开团团长的鼓励,每个团长都有所得的佣金比率. 微信拼团源码是否团限购: 商家设置团是否限购,选择否,团满可继续购买;选择是

【团购巨划算】韩立刚老师门徒级学习专题,只此一次的超大优惠福利

Q:韩立刚老师是谁? A:韩老师是51CTO金牌讲师(最高级别),也是微软最有价值专家MVP.微软企业护航专家.<计算机网络原理>一书作者 讲师主页:http://edu.51cto.com/lecturer/400469.html Q:门徒级学习专题是什么? A:韩立刚老师门徒级课程专题(Windows Server+网络安全+数据库) 韩老师从2013年至今,根据企业对IT运维人才的技术要求,录制视频教程49 门,时长达581小时50分钟.旨在从0起点培养企业高端IT人才,让你在企业IT部

POJ 3692 最大团

最大团=补图最大独立集 when 补图是二分图时, 最大团=补图顶点数-最大匹配 // // main.cpp // poj3692 // // Created by Fangpin on 15/5/29. // Copyright (c) 2015年 FangPin. All rights reserved. // #include <iostream> #include <cstdio> #include <cstring> using namespace std;

项目需求:基于微信平台的拼团活动系统

项目需求分析 基于微信平台的拼团活动系统 一.业务需求 基于微信平台的拼团系统是一个生活类微信公众平台,解决用户获取厦门城市活动信息问题.同城交友这方面在厦门还比较薄弱,可以通过这个平台增进厦门城市内部的交流,促进大家文娱生活的丰富度.应用前景主要在一下几个方面:1.各类商业活动也可以选择该平台来作为推广和营销的渠道.2.通过该平台找到与自己兴趣相关的活动并参与.活动类型可包括音乐.戏剧.讲座.聚会.电影.展览.活动.公益.旅行等众多内容.一切你热衷的饭局.K歌.球赛都能在上面组织.你可以发起一

猿团众包平台“项目保”让软件外包更靠谱

近日,猿团科技联合Testbird.权大师.红帽法律,共同推出“项目保”服务,为企业提供全程有保障的创业服务. Testbird是国内首个手游自动化云测试和移动APP测试平台,致力于为客户提供优质的测试服务,此次与猿团携手共推“项目保”,可在项目开发完成后提供专业测试. 同时,知识产权移动服务平台权大师加盟“项目保”,有力地保障雇主商标,知识产权.安全等问题. 红帽法律作为创业企业的法律卫士,在项目开发出现纠纷时,也将提供有力的法律服务. 什么是“项目保”? “项目保”是猿团为规范交易市场,打造

众筹、拼团购以次充好 平台能脱责吗?

纵观国内整个众筹发展史,其实时间并不算长.但就是在这极短的时间中,却吸引了千万用户的注意力和投资.无论是股权众筹.产品众筹.金融众筹抑或慈善众筹等,都有着一大批拥趸.就目前来看,众筹给大众的感觉就是"以小搏大".虽然不像彩票那样一本万利,但投入较少的钱就能够获得股权.超值产品等,怎么看就比较划算. 然而,就是有人利用大众贪小便宜的心理,将众筹这一原本为梦想加油鼓劲的事活生生地变成乱哄哄的团购,并借机骗取钱财.而在近日多次曝光的众筹骗局中,很多投资者在无法与众筹发起者直接联系.维权的情况

从多地商户抵制团购 看巨头“联盟小船”为何说翻就翻?

强强合并当下似乎已经成为国内互联网行业的风潮,滴滴和快的.美团和大众点评.58同城和赶集网.携程和去哪儿,乃至此前的优酷和土豆等,都是经典的案例.原本在细分互联网行业鼎力竞争的局面瞬间被打破,形成垄断趋势.为压缩成本.抢夺市场而结合的巨头,在坐上"联盟小船"之后,并没有像预料中的那样为互联网进步.创新做出贡献,反而是露出狰狞的獠牙,开始向平台上的参与者"嗜血啃食". 近段时间以来,多地团购商户开始公开抵制合并后的美团和大众点评.原因就在于两家公司合并之后,对平台上的

js团购倒计时

客户端代码可以看: http://www.zhangxinxu.com/wordpress/2010/07/%E5%9B%A2%E8%B4%AD%E7%B1%BB%E7%BD%91%E7%AB%99%E5%80%92%E8%AE%A1%E6%97%B6%E7%9A%84js%E5%AE%9E%E7%8E%B0/ /* by zhangxinxu 2010-07-27 * http://www.zhangxinxu.com/ * 倒计时的实现 */ var fnTimeCountDown = fu

iOS_21团购_【运行时】将字典转成对象模型

最终效果图: 核心代码: NSObject+Dict.h // // NSObject+Dict.h // 帅哥_团购 // // Created by beyond on 14-8-14. // Copyright (c) 2014年 com.beyond. All rights reserved. // 使用运行时,将dict转成对象 #import <Foundation/Foundation.h> @interface NSObject (Dict) // 一个对象,调用此方法,参数