题目链接

枚举时间

每一个时间点 对于每个之前的位置像当前位置连边,表示这一时刻可待在原地

每艘船 之前时刻位置向当前时刻连边

注意别漏了0时刻src连向earth的边

  1. #include<cstdio>
  2. #include<cctype>
  3. #include<algorithm>
  4. #define gc() getchar()
  5. const int T=501,N=17*T,M=25*T,INF=1e7;
  6. int n,m,k,src,des,v[25],num[25],pos[25][20];
  7. int Enum,H[N],nxt[M<<1],to[M<<1],cap[M<<1],q[N],lev[N],cur[N];
  8. inline int read()
  9. {
  10. int now=0,f=1;register char c=gc();
  11. for(;!isdigit(c);c=gc()) if(c=='-') f=-1;
  12. for(;isdigit(c);now=now*10+c-'0',c=gc());
  13. return now*f;
  14. }
  15. inline void AddEdge(int u,int v,int w)
  16. {
  17. to[++Enum]=v, nxt[Enum]=H[u], cap[Enum]=w, H[u]=Enum;
  18. to[++Enum]=u, nxt[Enum]=H[v], cap[Enum]=0, H[v]=Enum;
  19. }
  20. bool BFS(int mx)//这个上界别搞错。。
  21. {
  22. for(int i=0;i<=mx;++i) lev[i]=0,cur[i]=H[i];
  23. lev[des]=0;//, cur[des]=H[des];
  24. lev[src]=1, q[0]=src;
  25. int h=0,t=1;
  26. while(h<t)
  27. {
  28. int x=q[h++];
  29. for(int i=H[x];i;i=nxt[i])
  30. if(!lev[to[i]] && cap[i])
  31. {
  32. lev[to[i]]=lev[x]+1, q[t++]=to[i];
  33. if(to[i]==des) return 1;
  34. }
  35. }
  36. return 0;
  37. }
  38. int Dinic(int u,int flow)
  39. {
  40. if(u==des) return flow;
  41. int used=0;
  42. for(int &i=cur[u];i;i=nxt[i])
  43. if(lev[to[i]]==lev[u]+1 && cap[i])
  44. {
  45. int delta=Dinic(to[i],std::min(cap[i],flow-used));
  46. if(delta)
  47. {
  48. cap[i]-=delta, cap[i^1]+=delta, used+=delta;
  49. if(used==flow) return flow;
  50. }
  51. }
  52. lev[u]=0;
  53. return used;
  54. }
  55. int main()
  56. {
  57. n=read()+2,m=read(),k=read();
  58. Enum=1, src=0, des=7501;
  59. for(int i=1;i<=m;++i)
  60. {
  61. v[i]=read(), num[i]=read();
  62. for(int j=0;j<num[i];++j)
  63. {
  64. pos[i][j]=read();
  65. if(!pos[i][j]) pos[i][j]=n-1;
  66. else if(pos[i][j]==-1) pos[i][j]=n;
  67. }
  68. }
  69. int res=0,tot=0;
  70. AddEdge(src,n-1,INF);//,AddEdge(n,des,INF);
  71. while(++res<500)
  72. {
  73. AddEdge(src,res*n+n-1,INF), AddEdge(res*n+n,des,INF);
  74. for(int i=1;i<n;++i)
  75. AddEdge((res-1)*n+i,res*n+i,INF);
  76. for(int i=1;i<=m;++i)
  77. AddEdge((res-1)*n+pos[i][(res-1)%num[i]],res*n+pos[i][res%num[i]],v[i]);
  78. while(BFS((res+1)*n)) tot+=Dinic(src,INF);
  79. if(tot>=k) break;
  80. }
  81. if(res==500) putchar('0');
  82. else printf("%d",res);
  83. return 0;
  84. }

洛谷.2754.星际转移问题(最大流Dinic 分层)的更多相关文章

  1. 洛谷 P2754 星际转移问题【最大流】

    判无解的方法非常粗暴:快T了还是没有合法方案,就是无解. 然后枚举答案,对于每一天都建一套太空站,s连地球,t连月球,上一天的太空站连向这一天的太空站,流量均为inf.然后对于每个飞船,上一天的停靠站 ...

  2. [洛谷P3376题解]网络流(最大流)的实现算法讲解与代码

    [洛谷P3376题解]网络流(最大流)的实现算法讲解与代码 更坏的阅读体验 定义 对于给定的一个网络,有向图中每个的边权表示可以通过的最大流量.假设出发点S水流无限大,求水流到终点T后的最大流量. 起 ...

  3. 【题解】洛谷P1073 [NOIP2009TG] 最优贸易(SPFA+分层图)

    次元传送门:洛谷P1073 思路 一开始看题目嗅出了强连通分量的气息 但是嫌长没打 听机房做过的dalao说可以用分层图 从来没用过 就参考题解了解一下 因为每个城市可以走好几次 所以说我们可以在图上 ...

  4. 洛谷 1004 dp或最大费用流

    思路: dp方法: 设dp[i][j][k][l]为两条没有交叉的路径分别走到(i,j)和(k,l)处最大价值. 则转移方程为 dp[i][j][k][l]=max(dp[i-1][j][k-1][l ...

  5. 洛谷.1251.餐巾计划问题(费用流SPFA)

    题目链接 /* 每一天的餐巾需求相当于必须遍历某些点若干次 设q[i]为Dayi需求量 (x,y)表示边x容y费 将每个点i拆成i,i',由i'->T连(q[i],0)的边,表示求最大流的话一定 ...

  6. 洛谷 P2245 星际导航 解题报告

    P2245 星际导航 题目描述 sideman做好了回到Gliese 星球的硬件准备,但是sideman的导航系统还没有完全设计好.为了方便起见,我们可以认为宇宙是一张有N 个顶点和M 条边的带权无向 ...

  7. 洛谷P2469 星际竞速

    上下界费用流比较无脑,提供一种更巧妙的费用流,无需上下界. #include <cstdio> #include <algorithm> #include <queue& ...

  8. 洛谷.3381.[模板]最小费用最大流(zkw)

    题目链接 Update:我好像刚知道多路增广就是zkw费用流.. //1314ms 2.66MB 本题优化明显 #include <queue> #include <cstdio&g ...

  9. 2018.08.19 洛谷P1402 酒店之王(最大流)

    传送门 最大流入门题,把人拆点即可. 代码: #include<bits/stdc++.h> #define N 505 using namespace std; inline int r ...

随机推荐

  1. centos7版本设置OS启动默认进入图形界面还是文本界面

    相比7之前的版本,在centos7版本中,设置OS启动默认进入图形界面还是文本界面有了点变化 检查当前默认设置 [root@rems2 ~]# systemctl get-default graphi ...

  2. 转载:为什么选择Nginx(1.2)《深入理解Nginx》(陶辉)

    原文:https://book.2cto.com/201304/19610.html 为什么选择Nginx?因为它具有以下特点: (1)更快 这表现在两个方面:一方面,在正常情况下,单次请求会得到更快 ...

  3. unicode-range特定字符使用font-face自定义字体

    链接: https://www.zhangxinxu.com/wordpress/2016/11/css-unicode-range-character-font-face/

  4. Oracle ____Undo

    什么是回滚和撤销 update emp set sal=4000 where empno=7788 语句执行过程 1 检查empno=7788记录是否在buffer cache ,如果不存在,则读取到 ...

  5. 使用mybatis-spring-boot-starter如何打印sql语句

    只需要将接口文件的日志设置为debug即可. 例如你的mapper接口所在的文件夹是 com.demo.mapper 那么在application.properties配置文件中添加 logging. ...

  6. 01_kettle源码部署

    一 kettle源码部署概述 1.从git上选择合适的版本,并down下来: 2.创建一个java项目,建立core,dbdialog,engine,ui,plugins文件夹,和一个lib文件夹: ...

  7. RabbitMQ(一):RabbitMQ 安装与配置(Mac)

    一.rabbitmq 安装与配置 安装: brew install rabbitmq # 进入安装目录 cd /usr/local/Cellar/rabbitmq/3.7.12 # 启动 brew s ...

  8. Springbatch headerCallback 居然是在processor之前执行的

    今天遇到一个奇怪的问题,在一个step里有一个chunk,还有一个step的listener,这个listener实际上是一个headerCallback,这个headerCallback里面有一个@ ...

  9. [转] 插件兼容CommonJS, AMD, CMD 和 原生 JS

    模块标准 CommonJS CommonJS 有三个全局变量 module.exports 和 require.但是由于 AMD 也有 require 这个全局变量,故不使用这个变量来进行检测. 如果 ...

  10. 解决Delphi7的自带的UTF-8编码转换函数BUG

    Delphi7及其以下版本的 VCL 只支持 Ansi, 所以... WideString 与 UTF8String (定义与 AnsiString 相同) 并没有办法正确的在 VCL 中显示 Del ...