题目大意

有 \(n\) 只奶牛,\(q\) 种食物和 \(p\) 种饮料,每只奶牛喜欢一些饮料和食物,但只能那一种,求最小配对数量。

首先来看一下这道题的简化版:没有饮料,该怎么做呢?

我会!裸的二分图最大匹配!

但加了饮料,就有了两种限制条件,我们自然地想到直接饮料、食物和奶牛都连边,用Dinic跑网络最大流。

于是你WA了。

问题处在哪儿呢?

让我们来看一组数据:

1 2 2
2 2 1 2 1 2

用Dinic跑网络最大流,答案是2,但正确答案是1。

问题在于:同一只奶牛选了两次。

所以我们运用拆点的思想,将一只奶牛拆成两个点:出点和入点,食物连入点,出点连饮料。

然后你再交上去就A了qwq

给一下代码吧:

#include<cstring>
#include<cstdio>
#include<queue>
const int M=405;
struct Edge{
int to,nx,flow;
}e[M*200];
int n,q,p,s,t,cnt=1,d[M],h[M],cur[M];
inline int min(const int a,const int b){
return a>b?b:a;
}
inline void Add(int x,int y){
e[++cnt]=(Edge){y,h[x],1};h[x]=cnt;
e[++cnt]=(Edge){x,h[y],0};h[y]=cnt;
}
inline bool BFS(){
register int E,u,v;
std::queue<int>q;
memset(d,0,sizeof d);
q.push(s);d[s]=1;
while(!q.empty()){
u=q.front();q.pop();
for(E=cur[u]=h[u];E;E=e[E].nx)if(e[E].flow){
v=e[E].to;
if(!d[v]){
d[v]=d[u]+1;
q.push(v);
}
}
}
return d[t];
}
int DFS(register int u,register int flow){
if(u==t)return flow;
int used=flow;
for(register int&E=cur[u];E;E=e[E].nx)if(e[E].flow){
int v=e[E].to;
if(d[v]==d[u]+1){
int f=DFS(v,min(used,e[E].flow));
e[E].flow-=f;e[E^1].flow+=f;used-=f;
if(!f)d[v]=0;
if(!used)return flow;
}
}
return cur[u]=h[u],flow-used;
}
inline int Dinic(){
int ans=0;
while(BFS())while(int d=DFS(s,2e9))ans+=d;
return ans;
}
signed main(){
int i,j,u,x,y;
scanf("%d%d%d",&n,&q,&p);
s=0;t=q+n+n+p+1;
for(i=1;i<=q;++i)Add(s,i);
for(i=1;i<=n;++i)Add(q+i,q+n+i);
for(i=1;i<=p;++i)Add(q+n+n+i,t);
for(i=1;i<=n;++i){
scanf("%d%d",&x,&y);
for(j=1;j<=x;++j){
scanf("%d",&u);
Add(u,q+i);
}
for(j=1;j<=y;++j){
scanf("%d",&u);
Add(q+n+i,q+n+n+u);
}
}
printf("%d",Dinic());
}

P.S.:这种题能少一点儿吗qwq,这已经是我遇到的第三道“酒店之王”了 qwq

LGP2891题解的更多相关文章

  1. 2016 华南师大ACM校赛 SCNUCPC 非官方题解

    我要举报本次校赛出题人的消极出题!!! 官方题解请戳:http://3.scnuacm2015.sinaapp.com/?p=89(其实就是一堆代码没有题解) A. 树链剖分数据结构板题 题目大意:我 ...

  2. noip2016十连测题解

    以下代码为了阅读方便,省去以下头文件: #include <iostream> #include <stdio.h> #include <math.h> #incl ...

  3. BZOJ-2561-最小生成树 题解(最小割)

    2561: 最小生成树(题解) Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 1628  Solved: 786 传送门:http://www.lyd ...

  4. Codeforces Round #353 (Div. 2) ABCDE 题解 python

    Problems     # Name     A Infinite Sequence standard input/output 1 s, 256 MB    x3509 B Restoring P ...

  5. 哈尔滨理工大学ACM全国邀请赛(网络同步赛)题解

    题目链接 提交连接:http://acm-software.hrbust.edu.cn/problemset.php?page=5 1470-1482 只做出来四道比较水的题目,还需要加强中等题的训练 ...

  6. 2016ACM青岛区域赛题解

    A.Relic Discovery_hdu5982 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Jav ...

  7. poj1399 hoj1037 Direct Visibility 题解 (宽搜)

    http://poj.org/problem?id=1399 http://acm.hit.edu.cn/hoj/problem/view?id=1037 题意: 在一个最多200*200的minec ...

  8. 网络流n题 题解

    学会了网络流,就经常闲的没事儿刷网络流--于是乎来一发题解. 1. COGS2093 花园的守护之神 题意:给定一个带权无向图,问至少删除多少条边才能使得s-t最短路的长度变长. 用Dijkstra或 ...

  9. CF100965C题解..

    求方程 \[ \begin{array}\\ \sum_{i=1}^n x_i & \equiv & a_1 \pmod{p} \\ \sum_{i=1}^n x_i^2 & ...

随机推荐

  1. 获取缓存文件大小并清理 By HL

    通常用于删除缓存的时,计算缓存大小 //单个文件的大小 - (long long) fileSizeAtPath:(NSString*) filePath{ NSFileManager* manage ...

  2. Annotation深入研究——@Documented注释使用

    Documented注释的作用及其javadoc文档生成工具的使用 代码放在MyDocumentedtAnnotationDemo.java文件中 package org.yu.demo16.docu ...

  3. 简单实现支付密码输入框 By HL

    密码输入框在微信,支付宝中比较常见 主要功能点 1.6位(或者N位)密码输入框封装

  4. shell——并发工具parallel

    官方文档:https://www.gnu.org/software/parallel/parallel_tutorial.html 安装 (wget -O - pi.dk/3 || curl pi.d ...

  5. 【密码学工具】Ciphey和WinDecrypto的使用随笔

    1.Ciphey 官方文档 这个工具安装起来也很容易,用pip下载即可. pip install ciphey -i https://pypi.mirrors.ustc.edu.cn/simple/ ...

  6. Byobu安装与使用

    机子为Ubuntu18 Byobu安装 sudo apt-get install byobu Byobu安装后默认禁用,需要启用Byobu,之后每次登陆自动启用Byobu byobu-enable 还 ...

  7. 一次Kafka内存泄露排查经过

    一.现象 服务部署后内存总体呈上升趋势 二.排查过程 通过go tool pprof收集了三天内存数据 2月11号数据: 2月14号数据: 2月15号数据: 可以看到newPartitionProdu ...

  8. 痞子衡嵌入式:对比MbedTLS算法库纯软件实现与i.MXRT上DCP,CAAM硬件加速器实现性能差异

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是MbedTLS算法库纯软件实现与i.MXRT上DCP,CAAM硬件加速器实现性能差异. 近期有 i.MXRT 客户在集成 OTA SBL ...

  9. Cobbler 批量安装操作系统

    文章目录 环境准备 部署cobbler cobbler语法检查以及排错 问题1 问题2 问题3 问题4 问题5 问题6 问题7 问题8 修改dhcp模板 重启服务,再次检查 镜像配置 镜像导入 kic ...

  10. JUC之认识ConcurrentHashMap

    ConcurrentHashMap为什么广泛使用?回答这个问题之前先要回忆下几个基本的概念涉及hash的几个数据结构及锁优化(关于锁优化参考JMM之Java中锁概念的分类总结 - 池塘里洗澡的鸭子 - ...