【BZOJ 2744】 2744: [HEOI2012]朋友圈 (最大团,二分图匹配,构图)
2744: [HEOI2012]朋友圈
Description
在很久很久以前,曾经有两个国家和睦相处,无忧无虑的生活着。一年一度的评比大会开始了,作为和平的两国,一个朋友圈数量最多的永远都是最值得他人的尊敬,所以现在就是需要你求朋友圈的最大数目。两个国家看成是AB两国,现在是两个国家的描述:1. A国:每个人都有一个友善值,当两个A国人的友善值a、b,如果a xor b mod 2=1,那么这两个人都是朋友,否则不是;2. B国:每个人都有一个友善值,当两个B国人的友善值a、b,如果a xor b mod 2=0或者 (a or b)化成二进制有奇数个1,那么两个人是朋友,否则不是朋友;3. A、B两国之间的人也有可能是朋友,数据中将会给出A、B之间“朋友”的情况。4. 在AB两国,朋友圈的定义:一个朋友圈集合S,满足S∈A∪ B ,对于所有的i,j∈ S ,i 和 j 是朋友
由于落后的古代,没有电脑这个也就成了每年最大的难题,而你能帮他们求出最大朋 友圈的人数吗?
Input
第一行t<=6,表示输入数据总数。接下来t个数据:第一行输入三个整数A,B,M,表示A国人数、B国人数、AB两国之间是朋友的对数;第二行A个数ai,表示A国第i个人的友善值;第三行B个数bi,表示B国第j个人的友善值;第4——3+M行,每行两个整数(i,j),表示第i个A国人和第j个B国人是朋友。Output
输出t行,每行,输出一个整数,表示最大朋友圈的数目。Sample Input
2 4 7
1 2
2 6 5 4
1 1
1 2
1 3
2 1
2 2
2 3
2 4Sample Output
5
【样例说明】
最大朋友圈包含A国第1、2人和B国第1、2、3人。HINT
【数据范围】
两类数据
第一类:|A|<=200 |B| <= 200
第二类:|A| <= 10 |B| <= 3000
【分析】
%%%大颓果:http://blog.csdn.net/u010336344/article/details/56287207
普通的最大团貌似是NPC问题??
所以这题一定有特殊性质?
A国不奇偶的认识,明显最多只能选2个人。
B过同奇同偶的认识,如果认识的连边,那么有两个完全图,又有or什么的也是朋友,所以两个团中间还有边。
那么其实可以建反图求最大点独立集。
A国的小朋友的影响就直接枚举就好了。
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
#define Maxn 3010 int mymax(int x,int y) {return x>y?x:y;} int a[Maxn],b[Maxn]; struct node
{
int x,y,next;
}t[Maxn*Maxn];
int first[Maxn],len; void ins(int x,int y)
{
t[++len].x=x;t[len].y=y;
t[len].next=first[x];first[x]=len;
} int bx[Maxn],by[Maxn];
bool vis[Maxn];
bool eg[Maxn][Maxn]; int chw[Maxn],match[Maxn]; bool ffind(int x,int nt)
{
for(int i=first[x];i;i=t[i].next) if(chw[t[i].y]!=nt&&vis[t[i].y])
{
int y=t[i].y;
chw[y]=nt;
if(match[y]==||ffind(match[y],nt))
{
match[y]=x;
return ;
}
}
return ;
} int get_ans()
{
int ans=,nt=,h=;
for(int i=;i<=bx[]+by[];i++) if(vis[i]) h++;
memset(chw,,sizeof(chw));
memset(match,,sizeof(match));
for(int i=;i<=bx[];i++) if(vis[bx[i]])
{
nt++;
if(ffind(bx[i],nt)) ans++;
}
return h-ans;
} bool check(int x)
{
int nw=;
while(x)
{
if(x&) nw++;
x>>=;
}
return nw&;
} int main()
{
int n,m,k;
scanf("%d%d%d",&n,&m,&k);
for(int i=;i<=n;i++) scanf("%d",&a[i]);
for(int i=;i<=m;i++) scanf("%d",&b[i]);
bx[]=by[]=;
for(int i=;i<=m;i++) if(b[i]&) bx[++bx[]]=i;
for(int i=;i<=m;i++) if(!(b[i]&)) by[++by[]]=i;
for(int i=;i<=bx[];i++)
for(int j=;j<=by[];j++)
{
if(!check(b[bx[i]]|b[by[j]])) ins(bx[i],by[j]);
}
for(int i=;i<=m;i++) vis[i]=;
int ans=get_ans(); memset(eg,,sizeof(eg));
for(int i=;i<=k;i++)
{
int x,y;
scanf("%d%d",&x,&y);
eg[x][y]=;
} for(int i=;i<=n;i++)
{
for(int j=;j<=m;j++) vis[j]=eg[i][j];
ans=mymax(ans,get_ans()+);
for(int j=;j<=m;j++) vis[j]=;
}
for(int i=;i<=n;i++)
{
for(int ii=i+;ii<=n;ii++) if((a[i]&)^(a[ii]&))
{
for(int j=;j<=m;j++) vis[j]=eg[ii][j]&eg[i][j];
ans=mymax(ans,get_ans()+);
for(int j=;j<=m;j++) vis[j]=;
}
}
printf("%d\n",ans);
return ;
}
数据弱??一个很明显的错一开始还是AC了。。
2017-02-21 17:20:50
【BZOJ 2744】 2744: [HEOI2012]朋友圈 (最大团,二分图匹配,构图)的更多相关文章
- 【BZOJ 2744 】[HEOI2012]朋友圈
Description 在很久很久以前,曾经有两个国家和睦相处,无忧无虑的生活着.一年一度的评比大会开始了,作为和平的两国,一个朋友圈数量最多的永远都是最值得他人的尊敬,所以现在就是需要你求朋友圈的最 ...
- BZOJ2744:[HEOI2012]朋友圈(最大团,乱搞)
Description 在很久很久以前,曾经有两个国家和睦相处,无忧无虑的生活着.一年一度的评比大会开始了,作为和平的两国,一个朋友圈数量最多的永远都是最值得他人的尊敬,所以现在就是需要你求朋友圈的最 ...
- luogu P2423 [HEOI2012]朋友圈 (最大团)
在很久很久以前,曾经有两个国家和睦相处,无忧无虑的生活着. 一年一度的评比大会开始了,作为和平的两国,一个朋友圈数量最多的永远都是最值得他人的尊敬,所以现在就是需要你求朋友圈的最大数目.两个国家看成是 ...
- bzoj 2744: [HEOI2012]朋友圈 二分图匹配
2744: [HEOI2012]朋友圈 Time Limit: 30 Sec Memory Limit: 128 MBSubmit: 612 Solved: 174[Submit][Status] ...
- 【刷题】BZOJ 2744 [HEOI2012]朋友圈
Description 在很久很久以前,曾经有两个国家和睦相处,无忧无虑的生活着.一年一度的评比大会开始了,作为和平的两国,一个朋友圈数量最多的永远都是最值得他人的尊敬,所以现在就是需要你求朋友圈的最 ...
- 【二分图】HEOI2012 朋友圈
题目内容 洛谷链接 在很久很久以前,曾经有两个国家和睦相处,无忧无虑的生活着. 一年一度的评比大会开始了,作为和平的两国,一个朋友圈数量最多的永远都是最值得他人的尊敬,所以现在就是需要你求朋友圈的最大 ...
- BZOJ2744 HEOI2012朋友圈(二分图匹配)
先考虑B国.容易发现a xor b mod 2=0即二进制末位相同,那么可以据此将所有人分成两部分,每一部分各自是一个完全图.然后再将a or b有奇数个1的边连上,现在需要求的就是这样一个图里的最大 ...
- bzoj 2744 [HEOI2012]朋友圈——补图!+匈牙利算法
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=2744 求最大的团<==>补图(有边的变成没边.没边的变成有边)的最大独立集! A ...
- bzoj 2744: [HEOI2012]朋友圈
#include<cstdio> #include<iostream> #define M 3010 using namespace std; ],u[M*M>>] ...
随机推荐
- mysql无法通过ip地址链接
用BitNami搭建个站点(内含mysql数据库服务.phpmyadmin和Apache web Service), 用localhost或127.0.0.1及用户名密码连接没有问题.但是本机或远程通 ...
- python keras YOLOv3实现目标检测
1.连接 https://www.jianshu.com/p/3943be47fe84
- Windows Server 2008 R2英文版修改桌面主题(Win7主题)
1:首先打开Server Manager(凡是不知道在那里开发均可像Win7一样在运行里面搜索) 2:然后在左边的树形菜单中选择:Feature 点击右边页面中的:Add Features 这时候会出 ...
- bzoj 2733 平衡树启发式合并
首先对于一个连通块中,询问我们可以直接用平衡树来求出排名,那么我们可以用并查集来维护各个块中的连通情况,对于合并两个平衡树,我们可以暴力的将size小的平衡树中的所有节点删掉,然后加入大的平衡树中,因 ...
- linux系统引导流程
1.固件:硬件和软件结合.加电自检是我们按下电源会检测硬件像cpu.内存.网卡等信息.(从硬件层次检测硬件是否可用) 固件设置实例:设置时间 软件时间和硬件时间: [root@VM_0_12_cent ...
- nmap导出处理脚本
import sys log = open("result.gnmap","r") xls = open("output.csv",&quo ...
- 获取file中字段,写入到TXT文件中
一下代码省略了很多,哈哈哈 a.txt文件 uid,type,pointx,pointy,name1,9,911233763,543857286,区间测速起点3,9,906371086,5453354 ...
- Cause: java.lang.ClassCastException: java.lang.String cannot be cast to org.apache.ibatis.mapping.MappedStatement
我用的是pagehelper 4.2.0,利用其进行表单的分页处理并进行展示,在第一次执行的时候能够看到分页后的结果,刷新一下第二次就显示不出来,控制台出现: Cause: java.lang.Cla ...
- java的集合类面试题
转自:https://yq.aliyun.com/articles/78788?spm=5176.8252056.759076.3.uFYrmt java.util包中包含了一系列重要的集合类,而对于 ...
- z-index失效的情况
1.父标签 position属性为relative: 2.问题标签无position属性(不包括static): 3.问题标签含有浮动(float)属性. 4.问题标签的祖先标签的z-index值比较 ...