洛谷 P1231教辅的组成
/*
s->练习册(1~b)->书(b+1~a+b)->答案(a+b+1~a+b+c)->t
但是可能会有多本练习册指向同一本书,这本书又可能会指向多本答案
这样每本书对答案的贡献就不只是1了,所以考虑对书进行拆点
s->练习册(1~b)->书(b+1~a+b)->(a+b+a~a+a+b)->答案(a+a+b+1~a+a+b+c)->t
*/
#include<iostream>
#include<cstdio>
using namespace std;
const int INF=0x3f3f3f3f;
const int N=1e5+;
struct node{
int v,f,nxt;
}e[N*];
int m,a,b,c,Enum=,ans,t;
int front[N],cur[N],deep[N];
int q[N];
int qread()
{
int x=;
char ch=getchar();
while(ch<'' || ch>'')ch=getchar();
while(ch>='' && ch<=''){x=x*+ch-'';ch=getchar();}
return x;
}
void Insert(int u,int v)
{
e[++Enum].v=v;
e[Enum].f=;
e[Enum].nxt=front[u];
front[u]=Enum;
e[++Enum].v=u;
e[Enum].nxt=front[v];
front[v]=Enum;
}
bool bfs()
{
for(int i=;i<=t;i++)
{
deep[i]=;
cur[i]=front[i];
}
int head=,tail=;
deep[]=;
q[++tail]=;
int u;
while(head<=tail)
{
u=q[head++];
for(int i=front[u];i;i=e[i].nxt)
if(e[i].f && !deep[e[i].v])
{
deep[e[i].v]=deep[u]+;
if(e[i].v==t)
return ;
q[++tail]=e[i].v;
}
}
return ;
}
int dfs(int now,int cur_flow)
{
if(now==t)return cur_flow;
int rest=cur_flow,v;
for(int &i=cur[now];i;i=e[i].nxt)
{
v=e[i].v;
if(e[i].f && deep[v]==deep[now]+ && rest)
{
int new_flow=dfs(v,min(e[i].f,rest));
e[i].f-=new_flow;
e[i^].f+=new_flow;
rest-=new_flow;
if(!rest)return cur_flow;
}
}
deep[now]=;
return cur_flow-rest;
}
void Dinic()
{
while(bfs())
ans+=dfs(,INF);
printf("%d\n",ans);
}
int main()
{
scanf("%d%d%d",&a,&b,&c);
t=a+a+b+c+;
for(int i=;i<=b;i++)
Insert(,i);
for(int i=;i<=a;i++)
Insert(i+b,i+a+b);
for(int i=;i<=c;i++)
Insert(i+a+a+b,t);
scanf("%d",&m);
int u,v;
for(int i=;i<=m;i++)
{
u=qread();v=qread();
Insert(v,u+b);
}
scanf("%d",&m);
for(int i=;i<=m;i++)
{
u=qread();v=qread();
Insert(u+a+b,v+a+a+b);
}
Dinic();
return ;
}
洛谷 P1231教辅的组成的更多相关文章
- 【解题报告】洛谷 P1231 教辅的组成
[解题报告]洛谷 P1231 教辅的组成 题目链接 CSDN链接 这道题就只是一道普通的最大流问题,但是关键所在就是如何构图.要不是我看了题解,真的想不到这个构图方法呢 题目大意我就不写了,自己看好了 ...
- 洛谷 P1231 教辅的组成
P1231 教辅的组成 题目背景 滚粗了的HansBug在收拾旧语文书,然而他发现了什么奇妙的东西. 题目描述 蒟蒻HansBug在一本语文书里面发现了一本答案,然而他却明明记得这书应该还包含一份练习 ...
- 洛谷——P1231 教辅的组成
P1231 教辅的组成 题目背景 滚粗了的HansBug在收拾旧语文书,然而他发现了什么奇妙的东西. 题目描述 蒟蒻HansBug在一本语文书里面发现了一本答案,然而他却明明记得这书应该还包含一份练习 ...
- 洛谷 P1231 教辅的组成(网络最大流+拆点加源加汇)
题目背景 滚粗了的HansBug在收拾旧语文书,然而他发现了什么奇妙的东西. 题目描述 蒟蒻HansBug在一本语文书里面发现了一本答案,然而他却明明记得这书应该还包含一份练习题.然而出现在他眼前的书 ...
- [洛谷P1231] 教辅的组成
题目大意:有n1本书,n2本练习册和n3个答案,然后又一些条件,说明某本答案可能和某本书对应,某本练习册可能和某本书对应,求最多有多少本完整的书(有书,练习册,答案) 题解:网络流,对应就连边,然后考 ...
- 洛谷P1231 教辅的组成 最大流
裸题… Code: #include<cstdio> #include<cstring> #include<algorithm> #include<vecto ...
- 洛谷P1231 教辅的组成 网络流
Code: #include<cstdio> #include<cstring> #include<algorithm> #include<vector> ...
- 「洛谷P1231」教辅的组成 解题报告
P1231 教辅的组成 题目背景 滚粗了的HansBug在收拾旧语文书,然而他发现了什么奇妙的东西. 题目描述 蒟蒻HansBug在一本语文书里面发现了一本答案,然而他却明明记得这书应该还包含一份练习 ...
- AC日记——教辅的组成 洛谷 P1231
题目背景 滚粗了的HansBug在收拾旧语文书,然而他发现了什么奇妙的东西. 题目描述 蒟蒻HansBug在一本语文书里面发现了一本答案,然而他却明明记得这书应该还包含一份练习题.然而出现在他眼前的书 ...
随机推荐
- ThreadPoolExecutor使用错误导致死锁
背景 10月2号凌晨12:08收到报警,所有请求失败,处于完全不可用状态 应用服务器共四台resin,resin之前由四台nginx做负载均衡 服务器现象及故障恢复步骤 登入服务器,观察resin进程 ...
- SpringBoot与整合其他技术
SpringBoot与整合其他技术 5.1 SpringBoot整合Mybatis 5.1.1 添加Mybatis的起步依赖 <!--mybatis起步依赖--> <dependen ...
- java之struts2之数据检验
1.使用struts2时,有时候需要对数据进行相关的验证.如果对数据的要求比较严格,或对安全性要求比较高时,前端 js 验证还不够, 需要在后端再进行一次验证,保证数据的安全性. 2.struts2提 ...
- python-django中使用事务以及小坑
django中使用事务 一.导入事务模块 from django.db import transaction 二.对相应的业务进行事务操作 方式一:为整个函数进行事务操作 @transaction.a ...
- rabbitmq使用教程
检查RabbitMQ运行状态1)打开命令行命令行,进入RabbitMQ的安装目录: cd D:\installs\rabbitmq\rabbitmq_server-3.7.15\sbin2)输入 ra ...
- OO——UML解析
目录 第四单元博客作业 一.前两次作业架构设计 1. 第一次作业 2. 第二次作业 二.架构设计以及对OO方法理解的演进 1. 表达式求导 2. 多线程电梯 3. 地铁线路查询 4. UML图的解析 ...
- python多线程爆破压缩包密码
import zipfile from threading import Thread #多线程库 import optparse #选定字典或者文件 def extractFile(zfile,pa ...
- C# NPOI Excel 合并单元格和取消单元格
1.合并单元操作 //合并单元格 /** 第一个参数:从第几行开始合并 第二个参数:到第几行结束合并 第三个参数:从第几列开始合并 第四个参数:到第几列结束合并 **/ CellRangeAddres ...
- SuperTab
Tab快捷键提示功能 下载 http://www.vim.org/scripts/script.php?script_id=1643 安装 # vi supertab.vmb : UseVimball ...
- c#指定长度切割字符串,返回数组
public List<string> subStringByCount(string text, int count) { ;//开始索引 ;//结束索引 double count_va ...