BZOJ1280: Emmy卖猪pigs

https://lydsy.com/JudgeOnline/problem.php?id=1280

分析:

  • 这题感觉还好,因为是有时间顺序,所以拆点做最大流即可。
  • 具体地我们让当前层每一个猪圈连向下一层,钥匙的猪圈用inf无向边连上。
  • 看题解之后发现自己菜了,直接从人到人连边就完事了。
  • 不过我过了就没改

代码:

  1. #include <cstdio>
  2. #include <cstring>
  3. #include <algorithm>
  4. #include <cstdlib>
  5. #include <cmath>
  6. using namespace std;
  7. #define inf 0x3f3f3f3f
  8. #define N 200050
  9. #define M 2000050
  10. typedef double f2;
  11. namespace Dinic {
  12. int head[N],to[M],nxt[M],flow[M],dep[N],Q[N],cnt=1;
  13. const int S=N-1,T=N-2;
  14. inline void add(int u,int v,int f) {
  15. to[++cnt]=v; nxt[cnt]=head[u]; head[u]=cnt; flow[cnt]=f;
  16. to[++cnt]=u; nxt[cnt]=head[v]; head[v]=cnt; flow[cnt]=0;
  17. }
  18. bool bfs() {
  19. memset(dep,0,sizeof(dep));
  20. int l=0,r=0; dep[S]=1;
  21. Q[r++]=S;
  22. while(l<r) {
  23. int x=Q[l++],i;
  24. for(i=head[x];i;i=nxt[i]) if(!dep[to[i]]&&flow[i]) {
  25. dep[to[i]]=dep[x]+1; if(to[i]==T) return 1; Q[r++]=to[i];
  26. }
  27. }return 0;
  28. }
  29. int dfs(int x,int mf) {
  30. if(x==T) return mf;
  31. int i,nf=0;
  32. for(i=head[x];i;i=nxt[i]) if(dep[to[i]]==dep[x]+1&&flow[i]) {
  33. int tmp=dfs(to[i],min(mf-nf,flow[i]));
  34. if(!tmp) dep[to[i]]=0;
  35. nf+=tmp; flow[i]-=tmp; flow[i^1]+=tmp;
  36. if(nf==mf) break;
  37. }
  38. return nf;
  39. }
  40. int dinic() {
  41. int f=0,mxf=0;
  42. while(bfs()) {
  43. while((f=dfs(S,inf))) mxf+=f;
  44. }return mxf;
  45. }
  46. }
  47. int n,m,idx[1050][1050],tt[1050];
  48. int main() {
  49. using namespace Dinic;
  50. scanf("%d%d",&m,&n);
  51. int i,j,x,y;
  52. for(i=1;i<=n;i++) for(j=1;j<=m;j++) idx[i][j]=++idx[0][0];
  53. for(i=1;i<=m;i++) {
  54. scanf("%d",&x); add(S,idx[1][i],x);
  55. }
  56. for(i=1;i<=n;i++) {
  57. scanf("%d",&x);
  58. for(j=1;j<=x;j++) scanf("%d",&tt[j]);
  59. sort(tt+1,tt+x+1);
  60. for(j=1;j<=x;j++) {
  61. add(idx[i][tt[j]],n*m+i,inf);
  62. }
  63. if(i<m) {
  64. for(j=1;j<=m;j++) add(idx[i][j],idx[i+1][j],inf);
  65. 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);
  66. }
  67. scanf("%d",&y);
  68. add(n*m+i,T,y);
  69. }
  70. printf("%d\n",dinic());
  71. }

BZOJ1280: Emmy卖猪pigs的更多相关文章

  1. BZOJ1280 Emmy卖猪pigs 网络流

    正解:网络流 解题报告: 传送门! 我网络流的基础题都还麻油做完就来做这个了,,,wsl,,, 首先想下最基础的构图方法 不难想到把猪圈和顾客分别当做节点,然后新建一个源点和汇点 然后考虑怎么连边,首 ...

  2. 【BZOJ1280】Emmy卖猪pigs 最大流

    [BZOJ1280]Emmy卖猪pigs Description Emmy在一个养猪场工作.这个养猪场有M个锁着的猪圈,但Emmy并没有钥匙.顾客会到养猪场来买猪,一个接着一个.每一位顾客都会有一些猪 ...

  3. [BZOJ1280][POJ1149]Emmy卖猪pigs

    [BZOJ1280][POJ1149]Emmy卖猪pigs 试题描述 Emmy在一个养猪场工作.这个养猪场有 \(M\) 个锁着的猪圈,但Emmy并没有钥匙.顾客会到养猪场来买猪,一个接着一个.每一位 ...

  4. Bzoj 1280: Emmy卖猪pigs

    1280: Emmy卖猪pigs Time Limit: 1 Sec  Memory Limit: 162 MBSubmit: 279  Solved: 182[Submit][Status][Dis ...

  5. Pku1149 PIGS 卖猪

    题目链接:ヾ(≧∇≦*)ゝ Description Emmy在一个养猪场工作.这个养猪场有M个锁着的猪圈,但Emmy并没有钥匙. 顾客会到养猪场来买猪,一个接着一个.每一位顾客都会有一些猪圈的钥匙,他 ...

  6. [bzoj1280]卖猪

    首先考虑猪无法流动,那么源点向每一个猪圈连猪圈中猪个数的边,每一个顾客向汇点连所需猪的边,每一个猪圈向能打开它的顾客连inf的边,跑最大流即可. 但考虑猪要流动,有一个十分巧妙地做法,将每一个顾客所有 ...

  7. POJ1149 PIGS [最大流 建图]

    PIGS Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 20662   Accepted: 9435 Description ...

  8. bzoj AC倒序

    Search GO 说明:输入题号直接进入相应题目,如需搜索含数字的题目,请在关键词前加单引号 Problem ID Title Source AC Submit Y 1000 A+B Problem ...

  9. poj 1149 PIGS【最大流经典建图】

    PIGS Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 18727   Accepted: 8508 Description ...

随机推荐

  1. iOS11 仿大标题 导航栏

    iOS11 SytleTitleController  仿大标题 风格 导航栏 仿 iOS11 大导航标题 风格 UI 适用范围 iOS8 + 前言 iOS11全面应用大标题设计,(岂止于大—— 比逼 ...

  2. Service degrade

    服务降级:主要是针对非正常情况下的应急服务措施;比如电商平台,在针对618.双11等高峰情形下采用部分服务不出现或者延时出现的情形. 为什么是非正常情况下呢,比如我要出差,如果经常出差的话,要带的衣服 ...

  3. 09_Hadoop启动或停止的三种方式及启动脚本

    1.Hadoop启动或停止 1)第一种方式 分别启动 HDFS 和 MapReduce,命令如下: 启动: $ start-dfs.sh $ start-mapred.sh 停止: $ stop-ma ...

  4. Qt使用QCustomPlot开发

    一.入门 1.下载源文件http://www.qcustomplot.com/: 2.把.cpp和.h放在工程目录下,并将cpp和h加入工程: 3.在.pro中:QT += printsupport: ...

  5. .NET自带泛型委托方法Func、Action和Predicate

    Func.Action和Predicate是.NET自带的3个泛型委托方法,三个方法的区别其实并不大,要强行给混着用也是可以的,但是我们是有追求的人,把道理讲清楚总是好的. 一.Func是有返回值的方 ...

  6. Linux 配置 SSL 证书

    完整的 SSL 证书分为四个部分: CA 根证书 (root CA) 中级证书 (Intermediate Certificate) 域名证书 证书密钥 (仅由您持有) 以 COMODO Positi ...

  7. UVA 11029 || Lightoj 1282 Leading and Trailing 数学

    Leading and Trailing You are given two integers: n and k, your task is to find the most significant ...

  8. 使用 ActiveMQ 创建 Java 应用

    本章重点 Java 应用中内嵌 ActiveMQ 使用 Spring 内嵌 ActiveMQ 创建请求/响应应用 使用 Spring 构建 JMS 客户端

  9. wpf数据绑定的论述

    (1)绑定模式: <Lable x:Name=lab Content={binding UserName} /> <!--binding相当于SetBinding--> Con ...

  10. Page 生命周期阶段 以及 生命周期事件

    MSDN 关于 页面生命周期事件的详细介绍: http://msdn.microsoft.com/zh-cn/library/ms178472.aspx ASP.NET  页面生命周期,当IIS接收访 ...