题目链接:https://www.luogu.org/problemnew/show/P1231

对于每本书只能用一次,所以拆点再建边

#include <queue>
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std;
const int maxn = 50000 + 10;
const int inf = 1e9;
int n1, n2, n3, m1, m2, s, t, maxflow, deep[maxn];
struct edge{
int flow, next, to;
}e[maxn<<3];
int head[maxn], cnt = -1;
queue<int> q;
void add(int u, int v, int w)
{
e[++cnt].flow = w; e[cnt].next = head[u]; e[cnt].to = v; head[u] = cnt;
e[++cnt].flow = 0; e[cnt].next = head[v]; e[cnt].to = u; head[v] = cnt;
}
bool bfs(int s, int t)
{
memset(deep, 0x7f, sizeof(deep));
while(!q.empty()) q.pop();
q.push(s); deep[s] = 0;
while(!q.empty())
{
int now = q.front(); q.pop();
for(int i = head[now]; i != -1; i = e[i].next)
{
if(deep[e[i].to] > inf && e[i].flow)
{
deep[e[i].to] = deep[now] + 1;
q.push(e[i].to);
}
}
}
if(deep[t] < inf) return true;
else return false;
}
int dfs(int now, int t, int limit)
{
if(!limit || now == t) return limit;
int flow = 0, f;
for(int i = head[now]; i != -1; i = e[i].next)
{
if(deep[e[i].to] == deep[now] + 1 && (f = dfs(e[i].to, t, min(e[i].flow, limit))))
{
flow += f;
limit -= f;
e[i].flow -= f;
e[i^1].flow += f;
if(!limit) break;
}
}
return flow;
}
void Dinic(int s, int t)
{
while(bfs(s, t))
maxflow += dfs(s, t, inf);
}
int main()
{
memset(head, -1, sizeof(head));
scanf("%d%d%d", &n1, &n2, &n3);
s = 1, t = n1*2 + n2 + n3 + 2;
for(int i = 1; i <= n1; i++)
{
add(i + 1, i + n1 + n2 + n3 + 1, 1);
}
scanf("%d",&m1);
for(int i = 1; i <= m1; i++)
{
int u, v;
scanf("%d%d",&u,&v);
add(v + 1 + n1, u + 1, 1);
}
scanf("%d",&m2);
for(int i = 1; i <= m2; i++)
{
int u, v;
scanf("%d%d",&u,&v);
add(u + n1 + n2 + n3 + 1, v + n1 + n2 + 1, 1);
}
for(int i = 1; i <= n2; i++)
add(s, i + n1 + 1, 1);
for(int i = 1; i <= n3; i++)
add(i + n1 + n2 + 1, t, 1);
Dinic(s, t);
printf("%d",maxflow);
return 0;
}

【luogu P1231 教辅的组成】 题解的更多相关文章

  1. Luogu P1231 教辅的组成

    Luogu P1231 教辅的组成 题目背景 滚粗了的HansBug在收拾旧语文书,然而他发现了什么奇妙的东西. 题目描述 蒟蒻HansBug在一本语文书里面发现了一本答案,然而他却明明记得这书应该还 ...

  2. 【解题报告】洛谷 P1231 教辅的组成

    [解题报告]洛谷 P1231 教辅的组成 题目链接 CSDN链接 这道题就只是一道普通的最大流问题,但是关键所在就是如何构图.要不是我看了题解,真的想不到这个构图方法呢 题目大意我就不写了,自己看好了 ...

  3. 洛谷 P1231 教辅的组成

    P1231 教辅的组成 题目背景 滚粗了的HansBug在收拾旧语文书,然而他发现了什么奇妙的东西. 题目描述 蒟蒻HansBug在一本语文书里面发现了一本答案,然而他却明明记得这书应该还包含一份练习 ...

  4. luogu P1126 机器人搬重物 题解

    luogu P1126 机器人搬重物 题解 题目描述 机器人移动学会(\(RMI\))现在正尝试用机器人搬运物品.机器人的形状是一个直径\(1.6\)米的球.在试验阶段,机器人被用于在一个储藏室中搬运 ...

  5. 洛谷——P1231 教辅的组成

    P1231 教辅的组成 题目背景 滚粗了的HansBug在收拾旧语文书,然而他发现了什么奇妙的东西. 题目描述 蒟蒻HansBug在一本语文书里面发现了一本答案,然而他却明明记得这书应该还包含一份练习 ...

  6. P1231 教辅的组成(最大流)

    P1231 教辅的组成 这个题一看便知是网络流量,(三分图??滑稽..) 就一个小细节,如果我们仅仅将所有的点分成三部分跑网络流的话会有点小问题.. 因为这可能导致一本书被重复利用,就是有两条流经过同 ...

  7. 「 Luogu P1231 」 教辅的组成

    题目大意 有 $\text{N1}$ 本书 $\text{N2}$本练习册 $\text{N3}$本答案,一本书只能和一本练习册和一本答案配对.给你一些书和练习册,书和答案的可能的配对关系.问你最多可 ...

  8. 【Luogu】P1231教辅的组成(拆点+Dinic+当前弧优化)

    题目链接 妈耶 我的图建反了两次 准确的说是有两个地方建反了,然后反上加反改了一个小时…… 知道为什么要拆点吗? 假设这是你的图   左边到右边依次是超级源点    练习册     书     答案 ...

  9. P1231 教辅的组成

    传送门:https://www.luogu.org/problemnew/show/P1231 这是一道很不错的网络流入门题,关键在于如何建图. 首先,我们将练习册和源点连一条边权为1的边,然后若书 ...

随机推荐

  1. Nagios 利用NSClient++的check_nrpe方式使用自定义脚本监控windows

    分类 NsClient++来监控windows主机有三种方式:check_nt.check_nrpe.nsca.check_nt自带很多功能,但是扩展性差,check_nrpe可以通过执行自己定义的脚 ...

  2. 深入理解JavaScript系列(9):根本没有“JSON对象”这回事!

    前言 写这篇文章的目的是经常看到开发人员说:把字符串转化为JSON对象,把JSON对象转化成字符串等类似的话题,所以把之前收藏的一篇老外的文章整理翻译了一下,供大家讨论,如有错误,请大家指出,多谢. ...

  3. vue路由配置

    1.安装 npm install vue-router --save / cnpm install vue-router --save 2.引入并 Vue.use(VueRouter) (main.j ...

  4. 在Android源码中如何吧so库打包编译进入apk, 集成第三方库(jar和so库)

    集成第三方so和jar包 include $(CLEAR_VARS) #jar包编译            LOCAL_PREBUILT_STATIC_JAVA_LIBRARIES :=securit ...

  5. C#学习笔记13

    1.Task概述:Task是对操作系统线程的抽象,目的是使线程池能高效地管理线程的分配和回收,Task使用的底层线程属于一种共享资源,任务需要互相协作,并及时归还线程,以便用相同的共享资源(线程)满足 ...

  6. 4.kafka的安装部署

    为了安装过程对一些参数的理解,我先在这里提一下kafka一些重点概念,topic,broker,producer,consumer,message,partition,依赖于zookeeper, ka ...

  7. Supper关键字

    java中的super关键字是一个引用变量,用于引用直接父类对象. 每当创建子类的实例时,父类的实例被隐式创建,由super关键字引用变量引用. java super关键字的用法如下: super可以 ...

  8. Oracle JDBC 连接卡死后 Connection Reset

    坑 这绝对是我碰计算机以来遇到的第一大坑! 症状: 在Linux主机上远程登录,执行一个简单的Oracle的JDBC连接程序(jar包),结果硬生生的卡在了连接建立验证阶段,然后等上几分钟后因为连接超 ...

  9. Cocos2d-js 开发记录:自定义按钮

    游戏开发总是有些特殊,一般的预制的UI无法满足要求.其实对于不复杂的功能,与其看文档还不如自己写一个.比如游戏中一个虚拟键盘,其中的按键在按下时会增长,变为原来的两倍高度,在原来高度上方显示按键的字如 ...

  10. 9th week -the history of program 1950~2020

    We already know that programming language is a formal language designed to communicate instructions ...