BZOJ2744:[HEOI2012]朋友圈(最大团,乱搞)
Description
S∈A∪ B,对于所有的i,j∈S,i和j是朋友
由于落后的古代,没有电脑这个也就成了每年最大的难题,而你能帮他们求出最大朋友圈的人数吗?
Input
Output
Sample Input
1 2
2 6 5 4
1 1
1 2
1 3
2 1
2 2
2 3
2 4
Sample Output
【样例说明】
最大朋友圈包含A国第1、2人和B国第1、2、3人。
HINT
【数据范围】
两类数据
第一类:|A|<=200 |B| <= 200
第二类:|A| <= 10 |B| <= 3000
Solution
$A$了这个题才发现这个题网上怎么清一色匈牙利……QAQ。来一发应该是对的乱搞做法。
定义权值为奇数的为奇点,偶数的为偶点。首先简单分析一下$A,B$国的性质,可以发现:
$A$国内的边只有奇点连向偶点,也就是说只看$A$国的话是一个奇-偶的完全二分图。且若答案最大团里含$A$国的人,则奇点最多只有一个,偶点最多只有一个。(因为如果选两个奇点的话这两个奇点中间必定没有边,偶点同理。)
$B$国内奇点成一个团,偶点成一个团,且$(b_i~or~b_j)$化成二进制有奇数个$1$的也互连。也就是两个团之间连着几条边的形态。
分析完性质,可以发现$B$国的两个团并不一定是极大团,因为如果两个团之间连着的边足够的话,奇点也是可以被并到偶团里的。那么我们暴力一下,把$B$国的两个团都扩成极大团。
因为$A$国只有可能被选$0,1,2$个点去和$B$国的两个极大团合并,枚举一下$A$国选哪些就好了。
注意一些边界条件,具体看代码。
Code
#include<iostream>
#include<cstring>
#include<cstdio>
#include<vector>
#define N (3009)
using namespace std; int n,m,x,y,u,v,ans;
int a[N],b[N],G[N][N];
vector<int>A[],B[]; inline int read()
{
int x=,w=; char c=getchar();
while (!isdigit(c)) {if (c=='-') w=-; c=getchar();}
while (isdigit(c)) x=x*+c-'', c=getchar();
return x*w;
} int bitcount(int x)
{
return x?bitcount(x>>)+(x&):;
} bool check(int x,int opt)
{
bool flag=;
for (int i=; i<B[opt].size(); ++i)
if (!G[x][B[opt][i]]) flag=;
return flag;
} int main()
{
x=read(); y=read(); m=read(); n=x+y;
for (int i=; i<=x; ++i) A[(a[i]=read())%].push_back(i);
for (int i=; i<=y; ++i) B[(b[i]=read())%].push_back(i);
for (int i=; i<=m; ++i) G[u=read()][v=read()]=G[v][u]=; for (int i=; i<=y; ++i)
{
int t=b[i]%, flag=;
for (int j=; j<B[t^].size(); ++j)
{
int tmp=b[B[t^][j]];
if (tmp%==(t^) && bitcount(b[i]|tmp)%==) flag=;
}
if (flag) B[t^].push_back(i);
} ans=max((int)B[].size(),(int)B[].size());//只选B国的极大团之一。
ans=max(ans,(bool)A[].size()+(bool)A[].size());//只选A国。
for (int i=; i<A[].size(); ++i)//有一种特殊情况,为A国两个点加B国一个点的团。
for (int j=; j<A[].size(); ++j)
for (int k=; k<=y; ++k)
if (G[A[][i]][k] && G[A[][j]][k]) ans=max(ans,); for (int i=; i<A[].size(); ++i)//选一个A国偶点。
{
if (check(A[][i],)) ans=max(ans,(int)B[].size()+);
if (check(A[][i],)) ans=max(ans,(int)B[].size());
}
for (int i=; i<A[].size(); ++i)//选一个A国奇点。
{
if (check(A[][i],)) ans=max(ans,(int)B[].size()+);
if (check(A[][i],)) ans=max(ans,(int)B[].size()+);
}
for (int i=; i<A[].size(); ++i)//选一个A国偶点和一个A国奇点。
for (int j=; j<A[].size(); ++j)
{
if (check(A[][i],) && check(A[][j],)) ans=max(ans,(int)B[].size()+);
if (check(A[][i],) && check(A[][j],)) ans=max(ans,(int)B[].size()+);
}
printf("%d\n",ans);
}
BZOJ2744:[HEOI2012]朋友圈(最大团,乱搞)的更多相关文章
- 【BZOJ 2744】 2744: [HEOI2012]朋友圈 (最大团,二分图匹配,构图)
2744: [HEOI2012]朋友圈 Description 在很久很久以前,曾经有两个国家和睦相处,无忧无虑的生活着.一年一度的评比大会开始了,作为和平的两国,一个朋友圈数量最多的永远都是最值得他 ...
- luogu P2423 [HEOI2012]朋友圈 (最大团)
在很久很久以前,曾经有两个国家和睦相处,无忧无虑的生活着. 一年一度的评比大会开始了,作为和平的两国,一个朋友圈数量最多的永远都是最值得他人的尊敬,所以现在就是需要你求朋友圈的最大数目.两个国家看成是 ...
- BZOJ2744 HEOI2012朋友圈(二分图匹配)
先考虑B国.容易发现a xor b mod 2=0即二进制末位相同,那么可以据此将所有人分成两部分,每一部分各自是一个完全图.然后再将a or b有奇数个1的边连上,现在需要求的就是这样一个图里的最大 ...
- BZOJ2744: [HEOI2012]朋友圈
题目:http://www.lydsy.com/JudgeOnline/problem.php?id=2744 最大团是一个np问题.. 对于本题,做它的逆问题,建反图做最大独立集. 对于A最多取出两 ...
- bzoj2744 [HEOI2012]朋友圈——二分图匹配
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=2744 首先,求一个图的最大团等价于求它的补图的最大独立集,而二分图的最大独立集 = 总点数 ...
- bzoj 2744: [HEOI2012]朋友圈 二分图匹配
2744: [HEOI2012]朋友圈 Time Limit: 30 Sec Memory Limit: 128 MBSubmit: 612 Solved: 174[Submit][Status] ...
- 【BZOJ 2744 】[HEOI2012]朋友圈
Description 在很久很久以前,曾经有两个国家和睦相处,无忧无虑的生活着.一年一度的评比大会开始了,作为和平的两国,一个朋友圈数量最多的永远都是最值得他人的尊敬,所以现在就是需要你求朋友圈的最 ...
- 【刷题】BZOJ 2744 [HEOI2012]朋友圈
Description 在很久很久以前,曾经有两个国家和睦相处,无忧无虑的生活着.一年一度的评比大会开始了,作为和平的两国,一个朋友圈数量最多的永远都是最值得他人的尊敬,所以现在就是需要你求朋友圈的最 ...
- 【二分图】HEOI2012 朋友圈
题目内容 洛谷链接 在很久很久以前,曾经有两个国家和睦相处,无忧无虑的生活着. 一年一度的评比大会开始了,作为和平的两国,一个朋友圈数量最多的永远都是最值得他人的尊敬,所以现在就是需要你求朋友圈的最大 ...
随机推荐
- [EWS]如何: 通过使用 Exchange 中的 EWS 流有关邮箱事件的通知
摘要 在之前的文章中,介绍ews拉通知的模式订阅邮件.详情可阅读这篇文章:EWS 通过SubscribeToPullNotifications订阅Exchange新邮件提醒 ,可以看到拉通知的模式,是 ...
- Weex 学习文档、跳转路径、控制台输出、we转js汇总
最近在学习阿里的weex框架,网上教程真是不少,但是有用的确实是少的很.其中大多数都是讲如何配置移动端的,很少有讲到weex语法的.要知道,如果真需要用weex编写js页面的话,很有可能是移动端开发者 ...
- oracle逐步学习总结之权限和角色(基础六)
原创作品,转自请注明出处:https://www.cnblogs.com/sunshine5683/p/10236129.html 继续上节的索引,这次主要总结oracle数据库的权限问题!(在总结的 ...
- mongodb在线web管理工具
随着云计算,大数据等技术的不断发展,需要服务应用都朝着网络化,在线化的方向演进,数据库管理,数据库维护,数据可视化等也是这种趋势.MonggoDB,MySQL的在线管理,已成为一种强烈的需求,使用Tr ...
- MapReduce运行原理和过程
原文 一.Map的原理和运行流程 Map的输入数据源是多种多样的,我们使用hdfs作为数据源.文件在hdfs上是以block(块,Hdfs上的存储单元)为单位进行存储的. 1.分片 我们将这一个个bl ...
- 华中农业大学第五届程序设计大赛网络同步赛-G
G. Sequence Number In Linear algebra, we have learned the definition of inversion number: Assuming A ...
- CSS画0.5px的线
今天遇到一个需求,画0.5px的线,查了以下资料,主要以scale方法为主.代码如下: /*0.5px上边框*/ .half_top_border_before:before{ content: &q ...
- log4net 本地环境没问题 生产环境无法输出日志
log4net输出日志大概分两块 1.程序代码编写问题 2.配置文件问题 当程序本地可以正常输出日志.配置文件也都正常可用的情况下,发布到生产环境后,有的程序可以输出日志,有的程序不可以输出,程序无问 ...
- [Objective-C] 从NSInteger说开去
在iOS开发过程中,我一直习惯于使用C语法里的基本类型,而很少用(除非必须使用)Foundation的数据类型.最近看了一些资料,发现自己这样写可能有风险,虽然目前没遇到过相关的问题,但这是非常需要注 ...
- Python Word2Vec使用训练好的模型生成词向量
# 文本文件必须是utf-8无bom格式 from gensim.models.deprecated.word2vec import Word2Vec model = Word2Vec.load( ' ...