题目大意

有 \(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. 模拟dom结构

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  2. Category注意事项

    1.分类的使用注意事项 分类只能增加方法, 不能增加成员变量 @interface Person (NJ) { // 错误写法 // int _age; } - (void)eat; @end 分类中 ...

  3. Shell中的变量替换

    ${str-newStr} 仅当str为null的时候替换 ${str:-newStr} 当str为null或者str为空字符串的时候替换 综上,-号,当str没有内容,则替换, :号只是增加了空字符 ...

  4. iOS,蓝牙开发!!--By帮雷

    iOS的蓝牙开发大致有以下几种方式. 1 GameKit.framework [只能存在于iOS设备之间,多用于游戏 能搜索到的demo比较多,不确切说名字了,code4app里面就有] 2 Core ...

  5. Ext原码学习之Ext-more.js

    // JavaScript Document Ext.apply(Ext,{ userAgent:navigator.userAgent.toLowerCase(), cache:{}, isSeed ...

  6. 剑指Offer系列_30_包含min函数的栈

    以空间换时间: package leetcode.sword_to_offfer.day01; import java.util.Stack; /** * 定义栈的数据结构,请在该类型中实现一个能够得 ...

  7. P1015 [NOIP1999 普及组] 回文数

    点击查看题目 题目描述 若一个数(首位不为零)从左向右读与从右向左读都一样,我们就将其称之为回文数. 例如:给定一个十进制数 5656,将 5656 加 6565(即把 5656 从右向左读),得到 ...

  8. vc++调试总结

    .在debug->windows下,有以下调试窗口 1)Breakpoints管理断点信息 可以新建条件断点,函数断点,以及特定地址改变断点(用于检测数据发生改变时机点) 在断点处,可以进入汇编 ...

  9. python的import语句

    1.import作用 import跟C/C++中的#include作用有点类似,都是为了调用定义在其他文件中的变量.函数或者类,但实现的区别很大. C/C++中如果a.cpp include了b.h那 ...

  10. nginx负载均衡中利用redis解决session一致性问题

    关于session一致性的现象及原因不是本小作文的重点,可以另行找杜丽娘O(∩_∩)O哈哈~重点是利用redis集中存储共享session的实际操作. 一.业务场景:nginx/tomcat/redi ...