题意

给出一个二分图,左边为A集合,右边为B集合,要求把A集合中每一个点染为黑白两色中的一种,B集合中的颜色已定。染色后对于原本相邻且颜色相同的点,建立新的二分图,即得到了两个新的二分图,它们是独立的。求出这两个新的二分图的最大匹配数的和的最小值。数均小于等于5000。


思考

这是简化题意。由于暴力很难写,考虑网络流。将B集合中的每一个点根据其颜色分为一类和二类点。对于A集合中的每一个点,拆成两个点,两点连1的单向边,将所有相邻的一类点连线左边,另一类连向右边,值为1。所有二类点连向汇点,源点连向所有一类点。最小割。

这样,若割掉了某条边,代表了将某个点相邻的所有A集合中的点都染成了相同的颜色,并断绝了其他点的后路。


代码

 #include<bits/stdc++.h>
using namespace std;
const int maxn=1E5+;
const int inf=INT_MAX;
int head[maxn*],size=,n,m,a[maxn],dfn[maxn],S,T,x,y,ans,k;
struct edge{int to,next,w;}E[maxn*];
void add(int u,int v,int w)
{
E[++size].to=v;
E[size].next=head[u];
E[size].w=w;
head[u]=size; E[++size].to=u;
E[size].next=head[v];
E[size].w=;
head[v]=size;
}
bool bfs()
{
queue<int>Q;
for(int i=;i<=T;++i)dfn[i]=-;
dfn[S]=;
Q.push(S);
while(Q.size())
{
int u=Q.front();
Q.pop();
for(int i=head[u];i;i=E[i].next)
{
int v=E[i].to;
if(E[i].w==||dfn[v]!=-)continue;
dfn[v]=dfn[u]+;
Q.push(v);
}
}
return dfn[T]!=-;
}
int dinic(int u,int up)
{
if(u==T)return up;
int sum=;
for(int i=head[u];i;i=E[i].next)
{
int v=E[i].to;
if(E[i].w==||dfn[v]!=dfn[u]+)continue;
int g=dinic(v,min(E[i].w,up-sum));
E[i].w-=g;
E[i^].w+=g;
sum+=g;
if(g==)dfn[v]=-;
if(sum==up)break;
}
return sum;
}
int main()
{
// freopen("deadline.in","r",stdin);
// freopen("deadline.out","w",stdout);
ios::sync_with_stdio(false);
cin>>n>>m>>k;
for(int i=;i<=n;++i)cin>>a[i];
for(int i=;i<=k;++i)
{
cin>>x>>y;
if(a[x])add(x,y+n,inf);
else add(y+n+m,x,inf);
}
S=;
T=n+m*+;
for(int i=;i<=m;++i)add(i+n,i+n+m,);
for(int i=;i<=n;++i)
if(a[i])add(S,i,);
else add(i,T,);
while(bfs())ans+=dinic(S,inf);
cout<<ans<<endl;
return ;
}

19_04_02校内训练[deadline]的更多相关文章

  1. [4.14校内训练赛by hzwer]

    来自FallDream的博客,未经允许,请勿转载,谢谢. hzwer又出丧题虐人 4道noi....        很奇怪 每次黄学长出题总有一题我做过了. 嗯题目你们自己看看呗 好难解释 ----- ...

  2. [2017.4.7校内训练赛by hzwer]

    来自FallDream的博客,未经允许,请勿转载,谢谢. 报警啦.......hzwer又出丧题虐人啦..... 4道ctsc...有一道前几天做过了,一道傻逼哈希还wa了十几次,勉强过了3题..我好 ...

  3. [3.24校内训练赛by hzwer]

    来自FallDream的博客,未经允许,请勿转载,谢谢. ----------------------------------------------------------------------- ...

  4. 19_04_19校内训练[Game]

    题意 给出n,等概率地生成一个1~n的数列.现在有n个人从左到右站成一排,每个人拿有当前数列位置上的数字,并且一开始都不知道数字是多少(但知道n是多少).从左到右让每个人进行如下选择: 1.选择保留自 ...

  5. 平面图转对偶图&19_03_21校内训练 [Everfeel]

    对于每个平面图,都有唯一一个对偶图与之对应.若G‘是平面图G的对偶图,则满足: G'中每一条边的两个节点对应着G中有公共边的面,包括最外部无限大的面. 直观地讲,红色标出来的图就是蓝色标出的图的对偶图 ...

  6. fzyzojP3979 -- [校内训练20180914]魔法方阵

    原题见CF632F https://blog.csdn.net/Steaunk/article/details/80217764 这个比较神仙了 点边转化, 把max硬生生转化成了路径最大值,再考虑所 ...

  7. fzyzojP3580 -- [校内训练-互测20180315]小基的高智商测试

    题目还有一个条件是,x>y的y只会出现一次(每个数直接大于它的只有一个) n<=5000 是[HNOI2015]实验比较 的加强版 g(i,j,k)其实可以递推:g(i,j,k)=g(i- ...

  8. fzyzojP3372 -- [校内训练20171124]博弈问题

    对于每个点都要答案 还是异或 trie树合并石锤了 朴素枚举是O(n^2*17)的 怎么办呢? 我们发现合并的时候,一些部分的trie的子树还是不变的 改变的部分也就是合并的复杂度可以接受 鉴于大部分 ...

  9. fzyjojP2963 -- [校内训练20161227]疫情控制问题

    (题干中的废话已经划去) dp显而易见 收益为负数的可以直接扔掉不管.不要一定更优 子串问题,考虑SAM 建立广义SAM 尝试匹配,匹配到的位置的parent树祖先如果有完整的串,那么可以从这个串转移 ...

随机推荐

  1. Git 在 windows 上面的安装

    参考博客: https://blog.csdn.net/xiezhongyuan07/article/details/79411299 将该作者的文章搬过来, 大家可以直接看上面的原文章. 下面是拷贝 ...

  2. python 爬虫-1

    买了本书在自学,我也不知道自己能学到什么地步,反正不用这个找工作,纯属爱好,有可能之后就会放弃 233333333.... 先来一个特别简单点的:将百度搜索主页  扒下来,并保存到一个文件里面 fir ...

  3. C语言进阶之路(二)----字符串操作常见模型

    1.while模型 #define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <stdlib.h> #includ ...

  4. [ Build Tools ] Repositories

    仓库介绍 http://hao.jobbole.com/central-repository/ https://my.oschina.net/pingjiangyetan/blog/423380 ht ...

  5. 解决wine中文字体方块或乱码

    从Windows使用字体 如果有一个安装了Windows的分区, 可以通过链接它们来使用其字体. 例如, Windows的C:\盘被挂载在/windows: # ln -s /windows/Wind ...

  6. AD域与外部网站域名相同处理办法

    环境 域控:Windows Server 2008 r2 AD域:example.cn 问题:DNS可以正常解析外部域名(如www.baidu.com),但是无法解析mail.example.cn 原 ...

  7. nginx配置详细解析

    转自 http://blog.csdn.net/zhongguozhichuang/article/details/528168871.静态HTTP服务器 首先,Nginx是一个HTTP服务器,可以将 ...

  8. The Designer (笛卡尔定理+韦达定理 || 圆的反演)

    Nowadays, little haha got a problem from his teacher.His teacher wants to design a big logo for the ...

  9. write RE validation

    正则表达式,又称规则表达式.(英语:Regular Expression,在代码中常简写为regex.regexp或RE),计算机科学的一个概念.正则表达式通常被用来检索.替换那些符合某个模式(规则) ...

  10. i2c状态机方法设计-verilog

    2010-09-05 21:04:00 verilog语言基础学的差不多了.接着就是看看华为的语言编写规范.状态机设计方法是fpga的重要设计方法.所以我要记上一笔. 只要会FSM方法,用fpga编写 ...