题目链接

枚举时间

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

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

注意别漏了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. argv[1] 路径问题

    在看<学习opencv>一书时遇到一个小问题:函数只是通过argv传递参数来读取图片并显示,但是却一直弹出画布,没有图像. 如下:test.c # include<stdio.h&g ...

  2. Python3学习笔记15-迭代器与生成器

    生成器 如果创建一个有很多元素的列表,但是只需要访问前几个元素,后面的元素占着的空间就白白浪费了 在循环的过程中不断推算出后续的元素呢?这样就不必创建完整的list,从而节省大量的空间. 在Pytho ...

  3. redis安全 (error) NOAUTH Authentication required

    Redis 安全 我们可以通过 redis 的配置文件设置密码参数,这样客户端连接到 redis 服务就需要密码验证,这样可以让你的 redis 服务更安全. 实例 我们可以通过以下命令查看是否设置了 ...

  4. S5PV210 PWM定时器

    第一节 S5PV210的PWM定时器S5PV210共有5个32bit的PWM定时器,其中定时器0.1.2.3有PWM功能,定时器4没有输出引脚.PWM定时器使用PCLK_PSYS作为时钟源,相关知识可 ...

  5. tomcat6和tomcat7管理用户manager配置

    tomcat用户登录文件配置 如果想要对部署在tomcat上的项目进行管理查看,需要在tomcat安装目录conf文件夹下的tomcat-user.xml里添加用户登录权限.具体添加的内容如下: To ...

  6. 电信运营商 IT 系统介绍

    业务支撑系统 BSS: Business support system  运营支撑系统 OSS: Operation support system  管理支撑系统 MSS: Management Su ...

  7. LeetCode(5):最长回文子串

    Medium! 题目描述: 给定一个字符串 s,找到 s 中最长的回文子串.你可以假设 s 长度最长为1000. 示例: 输入: "babad" 输出: "bab&quo ...

  8. each()遍历

    在<jQuery教程/理解选取更新范围>一节中,我们知道:当选择器返回了多个元素时,可以使用一个方法来更新所有的元素,不再需要使用循环. 然后有的时候需要遍历元素,怎么办? 使用each( ...

  9. jvm类加载器以及双亲委派

    首先来了解几个概念: 类加载: 概念:虚拟机把描述类的数据从Class文件加载到内存,并对数据进行校验--转换解析--初始化,最终形成能被java虚拟机直接使用的java类型,就是jvm的类加载机制. ...

  10. 行为型模式之Command模式

    命令模式将一个请求封装成一个对象,从而让你使用不同的请求把客户端参数化, 并且可以对请求排队或者记录请求日志,可以提供命令的撤销和恢复功能. 概念描述 把命令的调用者与执行者分开,使双方不必关心对方是 ...