HDU 5556 最大独立集
这题主要有了中间的一些连通块的限制,不太好直接用二分图最大独立集做。考虑到图比较小,可以作补图求最大团来求解。
#include <iostream>
#include <vector>
#include <algorithm>
#include <string>
#include <string.h>
#include <stdio.h>
#include <queue>
#include <stack>
#include <map>
#include <set>
#include <cmath>
#include <ctime>
#include <cassert>
#include <sstream>
using namespace std; const int N=; char s[N][N];
int id[N][N];
int dx[]={,,,-};
int dy[]={,-,,};
int n,m; struct MC{
bool graph[N][N];
int stk[N][N],dp[N],mc;
int choice[N],vertex[N];
void dfs(int n,int sz,int dep){
if (sz==){
if (dep>mc){
mc=dep;
for (int i=;i<mc;i++)
vertex[i]=choice[i];
}
return;
}
for (int i=;i<sz;i++){
int u=stk[dep][i];
if (dep+dp[u]<=mc) return;
if (dep+sz-i<=mc) return;
choice[dep]=u;
int cnt=;
for (int j=i+;j<sz;j++){
int v=stk[dep][j];
if (graph[u][v])
stk[dep+][cnt++]=v;
}
dfs(n,cnt,dep+);
}
}
int maxClique(int n){
mc=;
//节点从1开始标号
dp[n]=;
for (int i=n-;i>=;i--){
int sz=;
for (int j=i+;j<=n;j++)
if (graph[i][j])
stk[][sz++]=j;
choice[]=i;
dfs(n,sz,);
dp[i]=mc;
}
return mc;
}
void solve(int &cas) {
map<char,int> mp;
int cnt=;
for (int i=;i<=n;i++) {
for (int j=;j<=m;j++) {
if (s[i][j]=='.')
id[i][j]=++cnt;
else if (mp.find(s[i][j])==mp.end())
id[i][j]=mp[s[i][j]]=++cnt;
else
id[i][j]=mp[s[i][j]];
}
}
//for (int i=1;i<=n;i++) for (int j=1;j<=m;j++) cout<<id[i][j]<<" ";cout<<endl;
for (int i=;i<=cnt;i++) {
for (int j=;j<=cnt;j++) {
if (i==j) graph[i][j]=false;
graph[i][j]=true;
}
}
for (int i=;i<=n;i++) {
for (int j=;j<=m;j++) {
int u=id[i][j];
for (int k=;k<;k++) {
int ni=i+dx[k];
int nj=j+dy[k];
if (ni<=||nj<=||ni>n||nj>m) continue;
int v=id[ni][nj];
graph[u][v]=false;
graph[v][u]=false;
}
}
}
printf("Case #%d: %d\n",cas,maxClique(cnt));
}
}mc; int main () {
//freopen("out.txt","r",stdin);
int T;
scanf("%d",&T);
while (T--) {
scanf("%d %d",&n,&m);
for (int i=;i<=n;i++) {
scanf("%s",s[i]+);
}
static int cas=;
mc.solve(cas);
cas++;
}
return ;
}
HDU 5556 最大独立集的更多相关文章
- hdu 3289 最大独立集
题意:一个动物园里有N只猫和K只狗,一些小朋友来参观,他们如果喜欢狗就不喜欢猫,喜欢猫就不喜欢狗,园长想要移走一些动物,如果,移走的是某个小朋友不喜欢的,而喜欢的没被移走,该小朋友就会高兴,求移动的数 ...
- Land of Farms HDU - 5556 二分图匹配
Farmer John and his brothers have found a new land. They are so excited and decide to build new farm ...
- hdu 1068(最大独立集)
Girls and Boys Time Limit: 20000/10000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) ...
- hdu 5556 Land of Farms 最大团+暴力
Land of Farms Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Tot ...
- HDU 1068 Girls and Boys (二分图最大独立集)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1068 有n个同学,格式ni:(m) n1 n2 n3表示同学ni有缘与n1,n2,n3成为情侣,求集合 ...
- HDU 1068 Girls and Boys(最大独立集合 = 顶点数 - 最大匹配数)
HDU 1068 :题目链接 题意:一些男孩和女孩,给出一些人物关系,然后问能找到最多有多少个人都互不认识. 转换一下:就是大家都不认识的人,即最大独立集合 #include <iostream ...
- HDU 1068 Girls and Boys(最大独立集)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1068 题目大意:有n个人,一些人认识另外一些人,选取一个集合,使得集合里的每个人都互相不认识,求该集合 ...
- HDU 3829——Cat VS Dog——————【最大独立集】
Cat VS Dog Time Limit:1000MS Memory Limit:65536KB 64bit IO Format:%I64d & %I64u Submit S ...
- hdu - 1068 Girls and Boys (二分图最大独立集+拆点)
http://acm.hdu.edu.cn/showproblem.php?pid=1068 因为没有指定性别,所以要拆点,把i拆分i和i’ 那么U=V-M (M是最大匹配,U最大独立集,V是顶点数) ...
随机推荐
- Python全栈开发——Linux命令学习
Linux -- 一切皆文件 pwd: 查看当前所在目录 '/' :根目录 cd : 切换目录 eg.cd / 切换到根目录 ls:查看当前根目录下有几块盘.几个文件 ls -l:查看详细信 ...
- KoaHub平台基于Node.js开发的Koa JWT认证插件代码信息详情
koa-jwt Koa JWT authentication middleware. koa-jwt Koa middleware that validates JSON Web Tokens and ...
- Node.js web快速入门 -- KoaHub.js
介绍 KoaHub.js -- 基于 Koa.js 平台的 Node.js web 快速开发框架.可以直接在项目里使用 ES6/7(Generator Function, Class, Async & ...
- 1574: [Usaco2009 Jan]地震损坏Damage
1574: [Usaco2009 Jan]地震损坏Damage Time Limit: 10 Sec Memory Limit: 64 MBSubmit: 425 Solved: 232[Subm ...
- SEO-关键词密度与友情链接交换技巧
关键词密度 关键词密度 关键词密度与关键词频率所阐述的实质上是同一个概念,用来量度关键词在网页上出现的总次数与其他文字的比例,一般用百分比表示.相对于页面总字数而言,关键词出现的频率越高,关键词密度也 ...
- js页面跳转常用的几种方式
第一种: <script language="javascript" type="text/javascript"> window.location ...
- 如何使用Vue2做服务端渲染
花费了一个月时间,终于在新养车之家项目中成功部署了vue2服务端渲染(SSR),并且使用上了Vuex 负责状态管理,首屏加载时间从之前4G网络下的1000ms,提升到了现在500-700ms之间,SS ...
- 时间相关库<ctime>解析
原创作品,转载请注明来源:http://www.cnblogs.com/shrimp-can/p/5649487.html 一.定义的类型 1.clock_t:时钟类型 2.size_t:unsign ...
- linux服务器证书安装指引
下面提供了3类服务器证书安装方法的示例: 1. Apache 2.x 证书部署 1.1 获取证书 Apache文件夹内获得证书文件 1_root_bundle.crt,2_www.domain.com ...
- CSS左侧固定宽 右侧自适应(兼容所有浏览器)
左侧固定宽,右侧自适应屏幕宽: 左右两列,等高布局: 左右两列要求有最小高度,例如:200px;(当内容超出200时,会自动以等高的方式增高) 要求不用JS或CSS行为实现: 仔细分析试题要求,要达到 ...