貌似咕了三个半月了(gym101915里一道),今天又遇到一道(cf1105E),就学了学惹。

最大团定义:图上取尽可能多的点,这些点构成一个完全图。

最大独立集:图上取尽可能多的点,任意两点间不连接。

可以看出来   一个图的最大团==它的补图的最大独立集 叭

那么我们可以搜索哇!(我不会搜索哇)

一个最朴素的搜索思想:  维护几个点集,当前已选择的,可以选择的,然后每次从可选择的点集里选一个与当前已选择的点都有边的点加进来,然后更新可选择的点集。

这个复杂度就比较恐怖哇

简单的优化:对点排序,每次都选一个节点编号比当前点编号大的。可以参考一下wannafly winter camp 的小木棍那题

剪枝一:如果当然已选点集大小+可选点集大小小于mx,return

剪枝二:我们从后向前选取点,保存后面的答案,如果当前点集+ans[待选]小于mx,return

其他的优化我也没看懂啊。。。

附 1105 E的代码,我真是自闭了。我傻逼了 map.count(s)和 mp[s] 是不一样的、、、调了半个多小时没看出来。。注释掉的部分是输出答案找bug的o.o

 #include <bits/stdc++.h>
using namespace std;
map<string,int> mp;
int n,m,op;string s;int cnt=-;
vector<int> v;
bool g[][];
int ans;int mx[];int alt[][];
//int cs[50];
bool DFS(int cur, int tot) {
if(cur==) {
if(tot>ans) {
ans=tot;
//for(int i=0;i<tot;i++){
// cout<<cs[i]<<' ';
//}
//cout<<endl;
return ;
}
return ;
}
for(int i=; i<cur; i++) {
if(cur-i+tot<=ans) return ;
int u=alt[tot][i];
if(mx[u]+tot<=ans) return ;
int nxt=;//cs[tot]=u;
for(int j=i+; j<cur; j++)
if(g[u][alt[tot][j]])
alt[tot+][nxt++]=alt[tot][j];
if(DFS(nxt, tot+)) return ;
}
return ;
}
int MaxClique() {
for(int i=cnt;i>=; i--) {
//cs[0]=i;
int cur=;
for(int j=i+; j<=cnt; j++)
if(g[i][j])
alt[][cur++]=j;
DFS(cur, );
mx[i]=ans;
}
return ans;
}
int main(){
ios::sync_with_stdio(false);
memset(g,, sizeof(g));
cin>>n>>m;
for(int i=;i<=n;i++){
cin>>op;
if(op==) v.clear();
else{
cin>>s;
if(!mp.count(s))mp[s]=++cnt;
int tmp = mp[s];
for(auto q:v)
g[tmp][q]=g[q][tmp]=false;
v.push_back(tmp);
}
}
cout<<MaxClique()<<endl;
}

最大团&优化的更多相关文章

  1. 【最大团转最大点独立集(匈牙利算法+时间戳优化)】BZOJ2744-[HEOI2012]朋友圈

    [题目大意] 有两个国家A和B.存在以下朋友关系: 1.A国:每个人都有一个友善值,当两个A国人的友善值a.b,如果a xor b mod 2=1,那么这两个人都是朋友,否则不是: 2.B国:每个人都 ...

  2. hdu3585 二分最大团(dp优化)

    题意       给你一些点( <= 50),让你找到k个点,使得他们之间的最小距离最大. 思路:       求最小的最大,我们可以直接二分去枚举距离,但是要注意,不要去二分double找距离 ...

  3. 第k小团+bitset优化——牛客多校第2场D

    模拟bfs,以空团为起点,用堆维护当前最小的团,然后进行加点更新 在加入新点时要注意判重,并且用bitset来加速判断和转移构造 #include<bits/stdc++.h> #incl ...

  4. web前端图片极限优化策略

    随着web的发展,网站资源的流量也变得越来越大.据统计,60%的网站流量均来自网站图片,可见对图片合理优化可以大幅影响网站流量,减小带宽消耗和服务器压力. 一.现有web图片格式 我们先来看下现在常用 ...

  5. 猿团YTFCloud生态系统,全面服务创业者

    9月15日,YTFCloud已正式开启了内测. 创业者翘首以待的YTFCloud,虽然让部分创业者感受到了它的神奇,但对于更多暂时无法尝试的创业者来说,它依然有一层神秘的面纱. 今天小编就来带你近距离 ...

  6. iOS开发UI篇—使用xib自定义UItableviewcell实现一个简单的团购应用界面布局

    iOS开发UI篇—使用xib自定义UItableviewcell实现一个简单的团购应用界面布局 一.项目文件结构和plist文件 二.实现效果 三.代码示例 1.没有使用配套的类,而是直接使用xib文 ...

  7. 页面头部title、description、keywords标签的优化

    页面头部优化<Head></Head>中间的区域中间的区域,我们称为网页的头部.在网页的头部中,通常存放一些介绍页面内容的信息,例如页面标题.描述及关键字等等.在头部优化中,除 ...

  8. 新浪微博iOS客户端架构与优化之路

    新浪微博iOS客户端架构与优化之路   随着Facebook.Twitter.微博的崛起,向UGC.PGC.OGC,自媒体提供平台的内 容消费型App逐渐形成了独特的客户端架构模式.与电商和通讯工具类 ...

  9. hdu 1530 最大团模板

    说明摘自:pushing my way 的博文 最大团 通过该博主的代码,总算理解了最大团问题,但是他实现时的代码效率却不算太高.因此在最后献上我的模板.加了IO优化目前的排名是: 6 yejinru ...

随机推荐

  1. MySQL匹配指定字符串的查询

    MySQL匹配指定字符串的查询 使用正则表达式查询时,正则表达式可以匹配字符串.当表中的记录包含这个字符串时,就可以将该记录查询出来.如果指定多个字符串时,需要用“|”符号隔开,只要匹配这些字符串中的 ...

  2. Java利用ShutDownHook关闭系统资源

    Java关闭钩子 在Java程序中能够通过加入关闭钩子,实如今程序退出时关闭资源的功能. 使用Runtime.addShutdownHook(Thread hook)向JVM加入关闭钩子 public ...

  3. linux clamav 免费查毒工具

    linux下需要杀毒工具吗?我一直认为是不要的,基于linux的病毒很少,linux 安全防护也做的很好,一般很难功破.我想那些黑客们更喜欢,写windows下的病毒,用的人多啊,传播也容易.下面的操 ...

  4. numpy.trace对于三维以上array的解析

    numpy.trace是求shape的对角线上的元素的和,具体看 https://docs.scipy.org/doc/numpy-1.13.0/reference/generated/numpy.t ...

  5. MDD Cup 2017 小记

    http://blog.csdn.net/zhangzhengyuan123123/article/details/78971298

  6. easyui textbox 获取焦点

    function Admin_ListAdd() { $('#ListInfo').css({ display: "inherit" }); $("#Department ...

  7. Web API中如何获取相对地址的绝对地址 Server.MapPath

    var sPath = System.Web.Hosting.HostingEnvironment.MapPath("/FilePath/");

  8. C语言截取从某位置开始指定长度子字符串方法

    c语言标准库没有截取部分字符串的函数,为啥?因为用现有函数strncpy,很容易做到! ] = {""}; "}; strncpy(dest, src, ); puts( ...

  9. 查看哪个用户登录过服务器 记录 时间 和 ip

    who /var/log/wtmp 1>wtmp 一个用户每次登录进入和退出时间的永久纪录

  10. Js 跳出两级循环的方法

    做过一个复杂的验证方法,需要两层each验证之后反正报错的信息.因为双重循环的问题,纠结了很久. /** * 验证input 的值 是否输入 flg:验证成功 false:验证失败 */ functi ...