传送门

解题思路

直接跑最大团洛谷上能得70分,惊了。说说正解,首先A国的必须xor后mod2余1,就相当于两个人必须是1奇1偶,所以A国的人只能选0,1,2个,我们可以暴力枚举选谁。继续考虑B国,现在的问题实际上就简化为了在B国中选出一个最大团,这个团也必须和A国所选出的人是朋友,又因为最大团=总点数-补图的最大匹配,补图就是将原来连着的边断了,原来没连的边连上,而进一步可以发现其实B国的补图是一个二分图,左部点是%2余1的,右部点是%2余0的,如果它们或起来有偶数个1就可以连边,然后就是二分图中求一个最大匹配,我用的匈牙利卡了过去。。

代码

#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<cstdlib>using namespace std;
const int MAXN = 3205;
const int MAXM = 1500*1500+5;inline int rd(){int x=0,f=1;char ch=getchar();while(!isdigit(ch)) {f=ch=='-'?0:1;ch=getchar();}while(isdigit(ch))  {x=(x<<1)+(x<<3)+ch-'0';ch=getchar();}return f?x:-x;
}int T,A,B,M,head[MAXM],cnt,ans;
int to[MAXM],nxt[MAXM],now;
int a[MAXN],b[MAXN],e[MAXN][MAXN];
int num,t,vis[MAXN],flag[MAXN],match[MAXN];inline void add(int bg,int ed){to[++cnt]=ed,nxt[cnt]=head[bg],head[bg]=cnt;
}inline bool dfs(int x){for(register int i=head[x];i;i=nxt[i]){int u=to[i];if(vis[u]!=num && flag[u]==t){vis[u]=num;if(!match[u] || dfs(match[u])){match[u]=x;return true;}}}return false;
}int main(){
//  T=rd(); A=rd();B=rd();M=rd();for(register int i=1;i<=A;i++) a[i]=rd();for(register int i=1;i<=B;i++) b[i]=rd();for(register int i=1;i<=B;i++)if((b[i]&1))for(register int j=1;j<=B;j++) if(!(b[j]&1) && !((__builtin_popcount((b[i]|b[j])))&1)) add(i,j);for(register int i=1;i<=M;i++) {int x=rd(),y=rd();e[x][y+A]=e[y+A][x]=1;}for(register int i=1;i<=B;i++)if((b[i]&1)){num++;if(dfs(i)) ans++;}ans=B-ans;for(register int i=1;i<=A;i++){t++;int sum=0;now=0;memset(match,0,sizeof(match));for(register int j=1;j<=B;j++)if(e[i][j+A]) flag[j]=t,now++; for(register int j=1;j<=B;j++)if(flag[j]==t && (b[j]&1)) {num++;if(dfs(j)) sum++; }ans=max(ans,now-sum+1);}for(register int i=1;i<=A;i++)for(register int j=i+1;j<=A;j++)if((a[i]^a[j])&1){memset(match,0,sizeof(match));t++;int sum=0;now=0;for(register int k=1;k<=B;k++)if(e[i][k+A] && e[j][k+A]) flag[k]=t,now++;for(register int k=1;k<=B;k++)if(flag[k]==t && (b[k]&1)) {num++;if(dfs(k)) sum++;}ans=max(ans,now-sum+2);}cout<<ans<<endl;return 0;
}

转载于:https://www.cnblogs.com/sdfzsyq/p/9676855.html

BZOJ 2744: [HEOI2012]朋友圈相关推荐

  1. 【BZOJ 2744 】[HEOI2012]朋友圈

    Description 在很久很久以前,曾经有两个国家和睦相处,无忧无虑的生活着.一年一度的评比大会开始了,作为和平的两国,一个朋友圈数量最多的永远都是最值得他人的尊敬,所以现在就是需要你求朋友圈的最 ...

  2. 解题报告:luogu P2423 [HEOI2012]朋友圈【最大团转最大点独立集(匈牙利算法+时间戳优化)】

    图的最大团:"任意两点之间都有一条边相连"的子图被称为无向图的团,点数最多的团为图的最大团 朋友圈中任意两个点之间都有关系,既是图中的团. 答案就是图中的最大团. 我们如果把B国的 ...

  3. bzoj2744[HEOI2012]朋友圈

    题目链接:bzoj2744 题目大意: 两个国家看成是AB两国,现在是两个国家的描述: 1.A国:每个人都有一个友善值,当两个A国人的友善值a.b,如果a xor b mod 2=1,那么这两个人都是 ...

  4. [HEOI2012] 朋友圈(最大团 + 结论 + 二分图 + 网络流)

    problem luogu-P2423 solution 本题即求无向图最大团问题.这是个 NP hard\text{NP hard}NP hard 问题,所以必须从图的特殊性质出发,否则只能暴搜. ...

  5. luogu P2423 [HEOI2012]朋友圈 (最大团)

    在很久很久以前,曾经有两个国家和睦相处,无忧无虑的生活着. 一年一度的评比大会开始了,作为和平的两国,一个朋友圈数量最多的永远都是最值得他人的尊敬,所以现在就是需要你求朋友圈的最大数目.两个国家看成是 ...

  6. HEOI2012 朋友圈

    这是做的最得意的一道题,当时在考场上得了90,是因为数据中A有100++的情况,Runtime_error了.. 首先强调,本人不是用二分图,或者说不用图论算法,只涉及简单的枚举和记忆化思想. A国的 ...

  7. BZOJ2744洛谷P2423P2423 [HEOI2012]朋友圈

    自从有了课件,我就不想打字了 代码(交在BZOJ的时候记得把组数删掉) //By AcerMo%%%尹兄 #include<cmath> #include<cstdio> #i ...

  8. cogs 2620. [HEOI2012]朋友圈

    /*70分 被卡T*/ #include<iostream> #include<cstdio> #include<cstring> using namespace ...

  9. 【BZOJ】【LYDSY】【大视野】2744(【HEOI2012】)朋友圈

    Description 在很久很久以前,曾经有两个国家和睦相处,无忧无虑的生活着.一年一度的评比大会开始了,作为和平的两国,一个朋友圈数量最多的永远都是最值得他人的尊敬,所以现在就是需要你求朋友圈的最 ...

最新文章

  1. Selenium 1.0的历史及工作原理
  2. 一个类实现多个接口的demo
  3. leetcode109. 有序链表转换二叉搜索树
  4. 台式电脑麦克风_还有人买台式PC吗?这份新品推荐攻略值得收藏
  5. Angular.js示例应用程序
  6. java连接rabbitmq_Mac / Windows 下安装 RabbitMQ
  7. 192.168.8.1手机登陆_192.168.1.1手机登陆
  8. 遗传算法详解及代码实现
  9. 模式识别之特征提取算法
  10. 上个前端的交接文档 感觉真的不错
  11. 常用参考文献GB/T 7714, MLA ,APA格式区别
  12. 小车yolo机械臂(四)python ros 和darknet_ros 使用launch文件启动脚本
  13. 国开电大 财务报表分析 形考任务
  14. 阿里云DevOps助理工程师认证(ACA)笔记
  15. Oracle SQL 基础要点
  16. 企业微信公众平台(4)KTV 3G网站建设
  17. C语言打印某一年的日历 (2*6格式)
  18. latex longtable 自动换行_TechRepo | LaTeX基本知识和应用
  19. 李珣同款爱心特效代码,加DIY教程,快拿去送给你喜欢的那个ta吧。
  20. Android横向滚动卡片,RecyclerView+CardView实现横向卡片式滑动效果

热门文章

  1. Python 技术篇 - 微信调用图灵机器人的api接口实现自动回复实例演示。图灵机器人的注册与使用
  2. [YTU]_2575( 交通工具信息)
  3. boundingRect函数
  4. STL中的栈结构和队列结构
  5. Ubuntu 中python 2 升级 (切换)3
  6. 优酷路由宝刷梅林_优酷路由宝刷breed(不死)教程
  7. 【HDU6662】Acesrc and Travel【树形DP】
  8. Config程序配置文件操作实践进阶之ConfigurationSectionGroup
  9. jQuery计算器插件
  10. html下纯JS实现图片压缩、预览、图片Base64转换