解题:HEOI 2012 朋友圈
因为$A$中只有奇偶性不同的人才能做朋友,所以A中只可能出0/1/2个人,分类讨论
然后$B$中求最大团,转成补图后正好是个二分图(不然就不用做了),求最大点独立集=总点数-最大匹配
我洛谷上交的时候建边的时候制杖了,成了$O(n^2m^2)$建边,还好数据水跑不满+网络流跑得快900ms救回来了,估计BZOJ肯定gg了,正确的做法是直接对B全部建然后走边的时候判一下
#include<cstdio>
#include<vector>
#include<cstring>
#include<algorithm>
using namespace std;
const int N=,M=,inf=1e9;
int p[N],from[M],noww[M],goal[M],flw[M],flow[M];
int a[N],b[N],pp[N],ch[N],dep[N],que[N];
int T,n,m,s,t,fr,bk,q,t1,t2,cnt,ans;
vector<int> ve[N];
vector<int> ::iterator it;
bool Odd(int x){return x&;}
bool Even(int x){return !(x&);}
int Bitcount(int x)
{
int ret=;
while(x)
ret++,x-=x&-x;
return ret;
}
void Link(int f,int t,int v)
{
noww[++cnt]=p[f],p[f]=cnt,from[cnt]=f;
goal[cnt]=t,flw[cnt]=flow[cnt]=v;
noww[++cnt]=p[t],p[t]=cnt,from[cnt]=t;
goal[cnt]=f,flw[cnt]=flow[cnt]=;
}
bool Layering(int st,int ed)
{
for(int i=;i<=ed;i++)
pp[i]=p[i],dep[i]=-;
dep[st]=,que[fr=bk=]=st;
while(fr<=bk)
{
int tn=que[fr++];
for(int i=pp[tn];i;i=noww[i])
if(ch[from[i]]&&ch[goal[i]])
if(dep[goal[i]]==-&&flow[i])
dep[goal[i]]=dep[tn]+,que[++bk]=goal[i];
}
return ~dep[ed];
}
int Augmenting(int nd,int ed,int mn)
{
if(nd==ed||!mn) return mn;
int tmp=,tep=;
for(int i=pp[nd];i;i=noww[i])
if(ch[from[i]]&&ch[goal[i]])
{
pp[nd]=i;
if(dep[goal[i]]==dep[nd]+)
if(tep=Augmenting(goal[i],ed,min(mn,flow[i])))
{
flow[i]-=tep,mn-=tep;
flow[i^]+=tep,tmp+=tep;
if(!mn) break;
}
}
return tmp;
}
int Dinic_Maxflow(int st,int ed)
{
int ret=;
while(Layering(st,ed))
ret+=Augmenting(st,ed,inf);
return ret;
}
int main()
{
register int i,j,k;
scanf("%d",&T);
while(T--)
{
scanf("%d%d%d",&n,&m,&q),ans=;
for(i=;i<=n;i++) ve[i].clear();
for(i=;i<=n;i++) scanf("%d",&a[i]);
for(i=;i<=m;i++) scanf("%d",&b[i]);
for(i=;i<=q;i++)
scanf("%d%d",&t1,&t2),ve[t1].push_back(t2);
cnt=,s=m+,t=s+;
for(i=;i<=m+;i++) ch[i]=,p[i]=;
for(i=;i<=m;i++)
for(j=i+;j<=m;j++)
if(Odd(b[i]^b[j])&&Even(Bitcount(b[i]|b[j])))
Odd(b[i])?Link(i,j,):Link(j,i,);
for(i=;i<=m;i++)
Odd(b[i])?Link(s,i,):Link(i,t,);
ans=max(ans,m-Dinic_Maxflow(s,t));
for(i=;i<=n;i++)
{
int tmp=;
for(j=;j<=m;j++) ch[j]=;
for(j=;j<=cnt;j++) flow[j]=flw[j];
for(it=ve[i].begin();it!=ve[i].end();it++) tmp++,ch[*it]=;
ans=max(ans,tmp-Dinic_Maxflow(s,t)+);
}
for(i=;i<=n;i++)
for(k=i+;k<=n;k++)
if(Odd(a[i]^a[k]))
{
int tmp=;
for(j=;j<=m;j++) ch[j]=;
for(j=;j<=cnt;j++) flow[j]=flw[j];
for(it=ve[i].begin();it!=ve[i].end();it++) ch[*it]++;
for(it=ve[k].begin();it!=ve[k].end();it++) ch[*it]++;
for(j=;j<=m;j++) ch[j]==?tmp++,ch[j]=:ch[j]=;
ans=max(ans,tmp-Dinic_Maxflow(s,t)+);
}
printf("%d\n",ans);
}
return ;
}
解题:HEOI 2012 朋友圈的更多相关文章
- Leetcode547 朋友圈解题报告 (DFS
题目描述: 班上有 N 名学生.其中有些人是朋友,有些则不是.他们的友谊具有是传递性.如果已知 A 是 B 的朋友,B 是 C 的朋友,那么我们可以认为 A 也是 C 的朋友.所谓的朋友圈,是指所有朋 ...
- C++之路进阶——codevs2366(朋友圈)
2366 朋友圈 2012年省队选拔赛河北 时间限制: 10 s 空间限制: 256000 KB 题目等级 : 大师 Master 题目描述 Description 在很久很久以前,曾经 ...
- [LeetCode] Friend Circles 朋友圈
There are N students in a class. Some of them are friends, while some are not. Their friendship is t ...
- LeetCode 547 朋友圈
题目: 班上有 N 名学生.其中有些人是朋友,有些则不是.他们的友谊具有是传递性.如果已知 A 是 B 的朋友,B 是 C 的朋友,那么我们可以认为 A 也是 C 的朋友.所谓的朋友圈,是指所有朋友的 ...
- Leetcode之深度优先搜索(DFS)专题-547. 朋友圈(Friend Circles)
Leetcode之深度优先搜索(DFS)专题-547. 朋友圈(Friend Circles) 深度优先搜索的解题详细介绍,点击 班上有 N 名学生.其中有些人是朋友,有些则不是.他们的友谊具有是传递 ...
- [LeetCode] 547. Friend Circles 朋友圈
There are N students in a class. Some of them are friends, while some are not. Their friendship is t ...
- QQ空间/朋友圈类界面的搭建
类似于QQ空间的布局主要是在说说信息.点赞.回复三大部分的自适应布局上. 当我们需要搭建类似QQ空间.微信朋友圈的界面的时候,可做如下操作: 创建一个对应的model类: 创建一个对应model类的f ...
- Python微信-- 分享接口(分享到朋友圈、朋友、空间)
生成JS-SDK权限验证的签名 获取signature(签名)首先要获得 1.#获得jsapi_ticket 2.#获取当前页面的url #获取当前页面的url url="{}://{}{} ...
- Apple Watch版微信来了 收发微信刷朋友圈不在话下
昨晚果粉守了一夜的Apple Watch发布会,意料中的惊喜不少,最让人兴奋的是微信成为首批支持的应用.是的,在全球拥有4.68亿月活跃用户的微信怎么可能不第一时间入驻呢?之前我们就有聊过Apple ...
随机推荐
- ptrace注入型病毒“聊天剽窃手”分析
概述 “聊天剽窃手”Windseeker是一款间谍软件,它使用了ptrace进程注入技术,能够对微信和QQ的聊天记录进行监控. 软件安装后的桌面图标和启动界面如图所示: 行为分析 该应用首先获取手 ...
- 20155307《网络对抗》MSF基础应用
实验过程 实验系统 所需设备: 靶机1:Windows XP Professional SP2 ,IP地址:192.168.1.128 靶机2:Windows XP Professional SP3 ...
- EZ 2018 03 09 NOIP2018 模拟赛(三)
最近挺久没写比赛类的blog了 链接:http://211.140.156.254:2333/contest/59 这次的题目主要考验的是爆搜+打表的能力 其实如果你上来就把所有题目都看过一次就可以知 ...
- R实战 第八篇:重塑数据(reshape2)
数据重塑通常使用reshape2包,reshape2包用于实现对宽数据及长数据之间的相互转换,由于reshape2包不在R的默认安装包列表中,在第一次使用之前,需要安装和引用: install.pac ...
- 重新解读DDD领域驱动设计(一)
回顾 十年前,还未踏入某校时,便听闻某学长一毕业就入职北京某公司,月薪过万.对于一个名不见经传的小学院,一毕业能拿到这个薪水还是非常厉害的.听闻他学生期间参与开发了一款股票软件,股票那时正迎来一波疯涨 ...
- Flask学习-Flask基础之WSGI
一.WSGI为什么会出现? 在学习一个东西之前,我们肯定想知道:它为什么会出现?那么,WSGI为什么会出现呢? 我们知道,部署一个web应用,经常需要使用nginx.apache或者IIS等web服务 ...
- JNI探秘-----FileInputStream的read方法详解
作者:zuoxiaolong8810(左潇龙),转载请注明出处,特别说明:本博文来自博主原博客,为保证新博客中博文的完整性,特复制到此留存,如需转载请注明新博客地址即可. 上一章我们已经分析过File ...
- Vue 入门之 Vuex 实战
Vue 入门之 Vuex 实战 引言 Vue 组件化做的确实非常彻底,它独有的 vue 单文件组件也是做的非常有特色.组件化的同时带来的是:组件之间的数据共享和通信的难题. 尤其 Vue 组件设计的就 ...
- CentOS 7 Apache服务的安装与配置
原文出处:http://blog.51cto.com/13525470/2070375 一.Apache简介 Apache 是一个知名的开源Web服务器.早期的Apache服务器由Apache Gro ...
- 【Alpha】第七次Scrum meeting
今日任务一览: 姓名 今日完成任务 所耗时间 刘乾 今日没有做很多事...一天都在沟通细化需求与画电路图 2 鲁聃 生成物理报告实验页面的生成 Issue链接:https://github.com/b ...