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());
}

最新文章

  1. 《DSP using MATLAB》示例Example5.18
  2. 第91讲:Akka第一个案例动手实战架构设计
  3. 遍历List/Map的时候删除成员遇到的奇怪问题
  4. Agile.Net 组件式开发平台 - 数据报表组件
  5. css笔记--web端小于1px设计的处理方法
  6. format %x invalid or incompatible with argument问题解决方法
  7. 发布(Windows)
  8. Openjudge-NOI题库-Pell数列
  9. Spring xml中进行autowired的方式
  10. Keepalived安装与配置
  11. 利用C#访问注册表获取软件的安装路径
  12. Hadoop Avro支持多输入AvroMultipleInputs
  13. adb 常用命名
  14. ef core code frist
  15. Docker 方式运行 sonarqube
  16. springboot测试
  17. 高效Java敏感词、关键词过滤工具包_过滤非法词句
  18. ActiveMQ 概述
  19. 低版本系统兼容的ActionBar(二)ActionProvider+分离式ActionBar+分离式的ActionMode
  20. 第九周(11.11-11.17)----Beta版本发布140字评论

热门文章

  1. HibernateQL
  2. iOS下的WiFi开发
  3. java基础之bit、byte、char、String
  4. [Android]开源中国源码分析之二---DrawerLayout
  5. 如何去掉Intellij IDEA过多的警告 设置警告级别
  6. Spring的AOP面向切面编程
  7. 剑指Offer——链表中倒数第k个节点
  8. hdu 5877 Weak Pair dfs序+树状数组+离散化
  9. Python之单例模式总结
  10. CDN,内容分发网络。