[洛谷P1231] 教辅的组成
题目大意:有n1本书,n2本练习册和n3个答案,然后又一些条件,说明某本答案可能和某本书对应,某本练习册可能和某本书对应,求最多有多少本完整的书(有书,练习册,答案)
题解:网络流,对应就连边,然后考虑一本书可能有多条边相连导致答案变大,就把书拆成两个点,边权为1
卡点:1.前向星cnt初值为0,就有一条边无法遍历到,应该赋2
C++ Code:
#include<cstdio>
#include<cstring>
using namespace std;
const int inf=0x3f3f3f3f;
inline int min(int a,int b){return a<b?a:b;}
int n1,n2,n3,m1,m2;
int a,b,end,start=1;
int cnt=2,head[50010];
int d[50010];
struct Edge{
int to,nxt,cost;
}e[150010];
int q[150010],h,t;
void add(int a,int b,int c){
e[cnt]=(Edge){b,head[a],c};head[a]=cnt;
e[cnt^1]=(Edge){a,head[b],0};head[b]=cnt^1;
cnt+=2;
}
bool bfs(){
memset(d,0,sizeof d);
d[q[h=t=1]=start]=1;
while (h<=t){
int x=q[h++];
// if (x==end)printf("%d\n",d[end]);
if (x==end)return true;
for (int i=head[x];i;i=e[i].nxt){
int to=e[i].to;
if ((!d[to])&&e[i].cost){
d[to]=d[x]+1;
q[++t]=to;
}
}
}
return d[end];
}
int dfs(int x,int low){
if ((x==end))return low;
int res=0,w;
for (int i=head[x];i;i=e[i].nxt){
int to=e[i].to;
if ((d[to]==d[x]+1)&&e[i].cost){
w=dfs(to,min(low-res,e[i].cost));
// printf("%d\n",w);
e[i].cost-=w;
e[i^1].cost+=w;
res+=w;
if (res==low)return res;
}
}
if (!res)d[x]=-1;
return res;
}
void dinic(){
int ans=0;
while (bfs()){
int k=dfs(start,inf);
if (k>0)ans+=k;
// printf("%d\n",ans);
}
printf("%d\n",ans);
}
int main(){
scanf("%d%d%d",&n1,&n2,&n3);
scanf("%d",&m1);
for (int i=0;i<m1;i++){
scanf("%d%d",&a,&b);
add(b+1,n2+a+1,1);
}
scanf("%d",&m2);
for (int i=0;i<m2;i++){
scanf("%d%d",&a,&b);
add(n1+n2+a+1,(n1<<1)+n2+b+1,1);
}
end=(n1<<1)+n2+n3+2;
for (int i=1;i<=n2;i++)add(start,i+1,1);
for (int i=1;i<=n3;i++)add((n1<<1)+n2+i+1,end,1);
for (int i=1;i<=n1;i++)add(n2+i+1,n1+n2+i+1,1);
dinic();
return 0;
}
[洛谷P1231] 教辅的组成的更多相关文章
- 【解题报告】洛谷 P1231 教辅的组成
[解题报告]洛谷 P1231 教辅的组成 题目链接 CSDN链接 这道题就只是一道普通的最大流问题,但是关键所在就是如何构图.要不是我看了题解,真的想不到这个构图方法呢 题目大意我就不写了,自己看好了 ...
- 洛谷 P1231 教辅的组成
P1231 教辅的组成 题目背景 滚粗了的HansBug在收拾旧语文书,然而他发现了什么奇妙的东西. 题目描述 蒟蒻HansBug在一本语文书里面发现了一本答案,然而他却明明记得这书应该还包含一份练习 ...
- 洛谷——P1231 教辅的组成
P1231 教辅的组成 题目背景 滚粗了的HansBug在收拾旧语文书,然而他发现了什么奇妙的东西. 题目描述 蒟蒻HansBug在一本语文书里面发现了一本答案,然而他却明明记得这书应该还包含一份练习 ...
- 洛谷 P1231 教辅的组成(网络最大流+拆点加源加汇)
题目背景 滚粗了的HansBug在收拾旧语文书,然而他发现了什么奇妙的东西. 题目描述 蒟蒻HansBug在一本语文书里面发现了一本答案,然而他却明明记得这书应该还包含一份练习题.然而出现在他眼前的书 ...
- 洛谷P1231 教辅的组成 最大流
裸题… Code: #include<cstdio> #include<cstring> #include<algorithm> #include<vecto ...
- 洛谷P1231 教辅的组成 网络流
Code: #include<cstdio> #include<cstring> #include<algorithm> #include<vector> ...
- 洛谷 P1231教辅的组成
题目描述 /* s->练习册(1~b)->书(b+1~a+b)->答案(a+b+1~a+b+c)->t 但是可能会有多本练习册指向同一本书,这本书又可能会指向多本答案 这样每本 ...
- 「洛谷P1231」教辅的组成 解题报告
P1231 教辅的组成 题目背景 滚粗了的HansBug在收拾旧语文书,然而他发现了什么奇妙的东西. 题目描述 蒟蒻HansBug在一本语文书里面发现了一本答案,然而他却明明记得这书应该还包含一份练习 ...
- AC日记——教辅的组成 洛谷 P1231
题目背景 滚粗了的HansBug在收拾旧语文书,然而他发现了什么奇妙的东西. 题目描述 蒟蒻HansBug在一本语文书里面发现了一本答案,然而他却明明记得这书应该还包含一份练习题.然而出现在他眼前的书 ...
随机推荐
- web学习第二天
今天是学习web的第二天,早上用css3做了个会动的小熊,border-radius为圆的半径, .smallxiong { width: 400px; height: 400px; ...
- 前端学习之HTML基础
要点: 理解HTTP请求响应模式及通信规范 HTML的各种标签和常用标签 CSS是用于样式渲染和定位布局 JS将HTML动态化 jquery是JS的高级封装 理解HTTP请求响应模式及通信规范 HTT ...
- POJ2762 单向连通图(缩点+拓扑排序
Going from u to v or from v to u? Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 19552 ...
- BZOJ2693: jzptab(莫比乌斯反演)
Time Limit: 10 Sec Memory Limit: 512 MBSubmit: 2068 Solved: 834[Submit][Status][Discuss] Descripti ...
- C++11中std::bind的使用
std::bind: Each argument may either be bound to a value or be a placeholder: (1).If bound to a value ...
- 【个人训练】(POJ1837)Balance
这几天抓住国庆的黄金时间(因为没有女朋友,天天刷题emmmm 其实还在肝少前还要捞秋刀鱼) ,重点攻克掉几个基本的地方:搜索.dp.图论.这几天的题目应该就是这些范围. 题意 原题的意思大概是这样的, ...
- Jmeter和Charles下载文件
有时候我们jmeter做自动化测试是会遇到文件上传和文件下载的接口,这里我将接结合Charles来Jmeter 文件下载进行讲解 一.用Charles抓包分析文件下载接口 1.1.业务中文件下载链接如 ...
- 关于python的闭包与装饰器的实验
首先看闭包,在嵌套函数内添加返回值,可以通过外部函数读取内部函数信息 #encoding=utf-8 #闭包应用 #先定义闭包函数,并使用 def outer(func): def inner(): ...
- Tuxedo 介绍与安装
Tuxedo 介绍与安装(一) Tuxedo介绍 ...
- python3.x 编码问题