BZOJ1280: Emmy卖猪pigs
BZOJ1280: Emmy卖猪pigs
https://lydsy.com/JudgeOnline/problem.php?id=1280
分析:
- 这题感觉还好,因为是有时间顺序,所以拆点做最大流即可。
- 具体地我们让当前层每一个猪圈连向下一层,钥匙的猪圈用inf无向边连上。
- 看题解之后发现自己菜了,直接从人到人连边就完事了。
- 不过我过了就没改
代码:
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cstdlib>
#include <cmath>
using namespace std;
#define inf 0x3f3f3f3f
#define N 200050
#define M 2000050
typedef double f2;
namespace Dinic {
int head[N],to[M],nxt[M],flow[M],dep[N],Q[N],cnt=1;
const int S=N-1,T=N-2;
inline void add(int u,int v,int f) {
to[++cnt]=v; nxt[cnt]=head[u]; head[u]=cnt; flow[cnt]=f;
to[++cnt]=u; nxt[cnt]=head[v]; head[v]=cnt; flow[cnt]=0;
}
bool bfs() {
memset(dep,0,sizeof(dep));
int l=0,r=0; dep[S]=1;
Q[r++]=S;
while(l<r) {
int x=Q[l++],i;
for(i=head[x];i;i=nxt[i]) if(!dep[to[i]]&&flow[i]) {
dep[to[i]]=dep[x]+1; if(to[i]==T) return 1; Q[r++]=to[i];
}
}return 0;
}
int dfs(int x,int mf) {
if(x==T) return mf;
int i,nf=0;
for(i=head[x];i;i=nxt[i]) if(dep[to[i]]==dep[x]+1&&flow[i]) {
int tmp=dfs(to[i],min(mf-nf,flow[i]));
if(!tmp) dep[to[i]]=0;
nf+=tmp; flow[i]-=tmp; flow[i^1]+=tmp;
if(nf==mf) break;
}
return nf;
}
int dinic() {
int f=0,mxf=0;
while(bfs()) {
while((f=dfs(S,inf))) mxf+=f;
}return mxf;
}
}
int n,m,idx[1050][1050],tt[1050];
int main() {
using namespace Dinic;
scanf("%d%d",&m,&n);
int i,j,x,y;
for(i=1;i<=n;i++) for(j=1;j<=m;j++) idx[i][j]=++idx[0][0];
for(i=1;i<=m;i++) {
scanf("%d",&x); add(S,idx[1][i],x);
}
for(i=1;i<=n;i++) {
scanf("%d",&x);
for(j=1;j<=x;j++) scanf("%d",&tt[j]);
sort(tt+1,tt+x+1);
for(j=1;j<=x;j++) {
add(idx[i][tt[j]],n*m+i,inf);
}
if(i<m) {
for(j=1;j<=m;j++) add(idx[i][j],idx[i+1][j],inf);
for(j=1;j<x;j++) add(idx[i+1][tt[j]],idx[i+1][tt[j+1]],inf),add(idx[i+1][tt[j+1]],idx[i+1][tt[j]],inf);
}
scanf("%d",&y);
add(n*m+i,T,y);
}
printf("%d\n",dinic());
}
BZOJ1280: Emmy卖猪pigs的更多相关文章
- BZOJ1280 Emmy卖猪pigs 网络流
正解:网络流 解题报告: 传送门! 我网络流的基础题都还麻油做完就来做这个了,,,wsl,,, 首先想下最基础的构图方法 不难想到把猪圈和顾客分别当做节点,然后新建一个源点和汇点 然后考虑怎么连边,首 ...
- 【BZOJ1280】Emmy卖猪pigs 最大流
[BZOJ1280]Emmy卖猪pigs Description Emmy在一个养猪场工作.这个养猪场有M个锁着的猪圈,但Emmy并没有钥匙.顾客会到养猪场来买猪,一个接着一个.每一位顾客都会有一些猪 ...
- [BZOJ1280][POJ1149]Emmy卖猪pigs
[BZOJ1280][POJ1149]Emmy卖猪pigs 试题描述 Emmy在一个养猪场工作.这个养猪场有 \(M\) 个锁着的猪圈,但Emmy并没有钥匙.顾客会到养猪场来买猪,一个接着一个.每一位 ...
- Bzoj 1280: Emmy卖猪pigs
1280: Emmy卖猪pigs Time Limit: 1 Sec Memory Limit: 162 MBSubmit: 279 Solved: 182[Submit][Status][Dis ...
- Pku1149 PIGS 卖猪
题目链接:ヾ(≧∇≦*)ゝ Description Emmy在一个养猪场工作.这个养猪场有M个锁着的猪圈,但Emmy并没有钥匙. 顾客会到养猪场来买猪,一个接着一个.每一位顾客都会有一些猪圈的钥匙,他 ...
- [bzoj1280]卖猪
首先考虑猪无法流动,那么源点向每一个猪圈连猪圈中猪个数的边,每一个顾客向汇点连所需猪的边,每一个猪圈向能打开它的顾客连inf的边,跑最大流即可. 但考虑猪要流动,有一个十分巧妙地做法,将每一个顾客所有 ...
- POJ1149 PIGS [最大流 建图]
PIGS Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 20662 Accepted: 9435 Description ...
- bzoj AC倒序
Search GO 说明:输入题号直接进入相应题目,如需搜索含数字的题目,请在关键词前加单引号 Problem ID Title Source AC Submit Y 1000 A+B Problem ...
- poj 1149 PIGS【最大流经典建图】
PIGS Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 18727 Accepted: 8508 Description ...
随机推荐
- 流量分析系统----讲解-echarts模拟迁移(结合china.js)
百度 Echarts 地图->模拟迁徙,实现自动切换地图 小航哥注释: 1.本文主要是把模拟迁移的流程讲了一遍,讲的很好.具体实现参考航哥这篇随笔“流量分析系统----实现-echarts模拟迁 ...
- Django 之基础续
1.路由系统之动态路由 前言:还记得之前的分页效果,这个如何实现呢?答案就是动态路由. url(r'^detail/(\d+)/$', views.detail), url(r'^detail2/(\ ...
- iOS 绘制漂亮的折线图
效果图是这样的: 关键是在 基本策略 是描点 和 连线. 折线基础版本,我找到网上的第三方,UUChart . 特点是朴素,简单,扩展性强. 效果图重点是在折线要有阴影,于是 重点 放在 折线发散的阴 ...
- 大道至简(第五i章)读后感
大道至简(第五章)读后感 再一次在不想看的情况下读大道至简第五章,一个项目的实现中,“过程”与“工程”是同一个概念吗?答案自然是否定的.“过程”是一个确定的模板,而“工程”是有一个目的的实现在里面. ...
- OS X 与传统Unix的一点区别
在传统的Unix系统或者Linux系统中,你是很难在根目录下找到大写开头的文件夹的, 但是看一下OS X: ls / Applications Users etc private var Develo ...
- 一个由自增运算符以及C语法顺序细节引起的bug
一.问题描述 在编写modbus代码时发生一件由语法细节引起的bug,起因是自增运算符以及C语法顺序. 输入的数据是2233=0X08B9,高低字节顺序是0x08 0xB9, 使用modbus po ...
- yield 表达式形式的应用
import random foods=['banana','apple','peach','grape','pear'] def deco(func): def wrapper(*args,**kw ...
- 使用concurrent.futures和ProcessPoolExecutor来替代线程和进程
concurrent.futures和ProcessPoolExecutor这两个类实现的借口分别在不同的线程或进程中执行可调用的对象,这两个类在内部维护者一个工作线程或进程池,以及要执行的队列,这两 ...
- nginx面试要点
首先列出一些面试题目包括nginx和redis的. 1..nginx 框架是怎样的 2. nginx负载均衡的算法怎么实现的,懵逼,说没看过 . nginx 的 upstream目前支持 4 种方式 ...
- java转义符的一些用法
那么这里在列上一些转义字符 \\ 反斜杠 \t 间隔 ('\u0009')\n 换行 ('\u000A')\r 回车 ('\u000D')\d 数字 等价于 [0-9]\D 非数字 等价于 [^0-9 ...