1. /*
  2. 大连热身C题
  3.  
  4. 不要低头,不要放弃,不要气馁,不要慌张
  5. 题意:
  6. 给一个城市路线图,给定起点给定终点。有n个货物从起点运送到终点。城市的边是无向边。
  7. 每个货物每天如果通过某条路,那么这天这条路只能运送这一个货物,另外一个方向也不得运送货物。
  8. 问最少需要多少天,使得起点的货物全部运送到终点。
  9.  
  10. 思路:
  11. 按照天数将城市节点裂点。即第i天的某个节点。
  12. 枚举天数,不断重新构建网络,跑最大流。找到最小的天数使得最大流大于等于n。
  13. 看了大神的博客,知道这个东西实际上叫做分层图。
  14.  
  15. */
  16.  
  17. #include<bits/stdc++.h>
  18. using namespace std;
  19. const int MAXN=,MAXM=,inf=1e9;
  20. struct Edge
  21. {
  22. int v,c,f,nx;
  23. Edge() {}
  24. Edge(int v,int c,int f,int nx):v(v),c(c),f(f),nx(nx) {}
  25. } E[MAXM];
  26. int G[MAXN],cur[MAXN],pre[MAXN],dis[MAXN],gap[MAXN],sz;
  27. void init()
  28. {
  29. sz=; memset(G,-,sizeof(G));
  30. }
  31. void add_edge(int u,int v,int c)
  32. {
  33. //printf("%d %d \n",u,v);
  34. E[sz]=Edge(v,c,,G[u]); G[u]=sz++;
  35. E[sz]=Edge(u,,,G[v]); G[v]=sz++;
  36. }
  37. bool bfs(int S,int T)
  38. {
  39. static int Q[MAXN]; memset(dis,-,sizeof(dis));
  40. dis[S]=; Q[]=S;
  41. for (int h=,t=,u,v,it;h<t;++h)
  42. {
  43. for (u=Q[h],it=G[u];~it;it=E[it].nx)
  44. {
  45. if (dis[v=E[it].v]==-&&E[it].c>E[it].f)
  46. {
  47. dis[v]=dis[u]+; Q[t++]=v;
  48. }
  49. }
  50. }
  51. return dis[T]!=-;
  52. }
  53. int dfs(int u,int T,int low)
  54. {
  55. if (u==T) return low;
  56. int ret=,tmp,v;
  57. for (int &it=cur[u];~it&&ret<low;it=E[it].nx)
  58. {
  59. if (dis[v=E[it].v]==dis[u]+&&E[it].c>E[it].f)
  60. {
  61. if (tmp=dfs(v,T,min(low-ret,E[it].c-E[it].f)))
  62. {
  63. ret+=tmp; E[it].f+=tmp; E[it^].f-=tmp;
  64. }
  65. }
  66. }
  67. if (!ret) dis[u]=-; return ret;
  68. }
  69. int dinic(int S,int T)
  70. {
  71. int maxflow=,tmp;
  72. while (bfs(S,T))
  73. {
  74. memcpy(cur,G,sizeof(G));
  75. while (tmp=dfs(S,T,inf)) maxflow+=tmp;
  76. }
  77. return maxflow;
  78. }
  79. struct edge{
  80. int id;
  81. edge *next;
  82. };
  83. edge edges[];
  84. edge *adj[];
  85. int ednum;
  86. inline void addedge(int a,int b){
  87. edge *tmp=&edges[ednum++];
  88. tmp->id=b;
  89. tmp->next=adj[a];
  90. adj[a]=tmp;
  91. }
  92. int x[],y[];
  93. int ddis[];
  94. struct st{
  95. st(){}
  96. st(int a,int b){
  97. id=a;step=b;
  98. }
  99. int id,step;
  100. };
  101. int main()
  102. {
  103. int n,m,k,s,t;
  104. while(scanf("%d%d%d%d%d",&n,&m,&k,&s,&t)!=EOF){
  105. if(m>=)while()puts("+++");
  106. ednum=;
  107. memset(adj,NULL,sizeof(adj));
  108. for(int i=;i<=m;i++){
  109. scanf("%d%d",x+i,y+i);
  110. addedge(x[i],y[i]);
  111. addedge(y[i],x[i]);
  112. }
  113. memset(ddis,-,sizeof(ddis));
  114. for(int i=;;i++){
  115. init();
  116. for(int j=;j<=m;j++){
  117. for(int tt=;tt<i;tt++){
  118. add_edge(tt*n+x[j],tt*n+n+y[j],);
  119. add_edge(tt*n+y[j],tt*n+n+x[j],);
  120. }
  121. }
  122. add_edge(,,k);
  123. for(int j=;j<=i;j++){
  124. add_edge(j*n+t,,inf);
  125. add_edge(,j*n+s,inf);
  126. }
  127. int w=dinic(,);
  128. if(w>=k){
  129. printf("%d\n",i);
  130. break;
  131. }
  132. }
  133. }
  134. }

ACdream 1017 [分层图][网络流]的更多相关文章

  1. [CTSC1999]家园 分层图网络流_并查集

    Code: #include<cstdio> #include<vector> #include<algorithm> #include<queue> ...

  2. POJ 1895 分层图网络流+输出路径

    题意: 题目描述:在公元3141年人类的足迹已经遍布银河系.为了穿越那巨大的距离,人类发明了一种名为超时空轨道的技术.超时空轨道是双向的,连接两个星系,穿越轨道需要一天的时间.然而这个轨道只能同时给一 ...

  3. 【网络流24题】 No.15 汽车加油行驶问题 (分层图最短路i)

    [题意] 问题描述:给定一个 N*N 的方形网格,设其左上角为起点◎, 坐标为( 1, 1), X 轴向右为正, Y轴向下为正, 每个方格边长为 1, 如图所示. 一辆汽车从起点◎出发驶向右下角终点▲ ...

  4. 【网络流24题】 No.14 孤岛营救问题 (分层图最短路)

    [题意] 1944 年,特种兵麦克接到国防部的命令,要求立即赶赴太平洋上的一个孤岛, 营救被敌军俘虏的大兵瑞恩. 瑞恩被关押在一个迷宫里, 迷宫地形复杂, 但幸好麦克得到了迷宫的地形图. 迷宫的外形是 ...

  5. ACdream 1017 Fast Transportation

    http://acdream.info/problem?pid=1017 题意:给n个点,m条边,K个货物,要从从S到T,每天每条边最多只能经过1次,求要几天能运完 思路:拆成分层图,每层向下一层连边 ...

  6. [CODEVS1911] 孤岛营救问题(分层图最短路)

    传送门 吐槽:神tm网络流... 用持有的钥匙分层,状态压缩,用 2 进制表示持有的钥匙集合. dis[i][j][k] 表示持有的钥匙集合为 k,到达点 (i, j) 的最短路径. 分层图的最短路听 ...

  7. 【题解】P3645 [APIO2015]雅加达的摩天楼(分层图最短路)

    [题解]P3645 [APIO2015]雅加达的摩天楼(分层图最短路) 感觉分层图是个很灵活的东西 直接连边的话,边数是\(O(n^2)\)的过不去 然而我们有一个优化的办法,可以建一个新图\(G=( ...

  8. 【BZOJ-3627】路径规划 分层图 + Dijkstra + spfa

    3627: [JLOI2014]路径规划 Time Limit: 30 Sec  Memory Limit: 128 MBSubmit: 186  Solved: 70[Submit][Status] ...

  9. poj3635Full Tank?[分层图最短路]

    Full Tank? Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 7248   Accepted: 2338 Descri ...

随机推荐

  1. 去除手机浏览器input焦点默认边框(直接用outline:none就可以了)

    1.使用Chrome的都知道,当鼠标焦点在input.textarea这些元素上时,Chrome默认的会给它们加上黄色的边框,我以前一直以为这是chrome的特性,没法去掉,原来是css的效果,out ...

  2. HTML编码规范

    HTML编码规范 1 前言 HTML作为描述网页结构的超文本标记语言,在百度一直有着广泛的应用.本文档的目标是使HTML代码风格保持一致,容易被理解和被维护. 2 代码风格 2.1 缩进与换行 [强制 ...

  3. web前端的学习.

    web前端的了解 1.前端技术包括JavaScript.ActionScript.CSS.xHTML等“传统”技术与Adobe AIR.Google Gears,以及概念性较强的交互式设计,艺术性较强 ...

  4. 【Cocos2d-x 3.x】 事件处理机制源码分析

    在游戏中,触摸是最基本的,必不可少的.Cocos2d-x 3.x中定义了一系列事件,同时也定义了负责监听这些事件的监听器,另外,cocos定义了事件分发类,用来将事件派发出去以便可以实现相应的事件. ...

  5. 转:对于服务器AdminServer, 与计算机Machine-0相关联的节点管理器无法访问

    控制台启动server时报"对于服务器server-1与计算机machin<!--StartFragment -->对于服务器AdminServer, 与计算机Machine-0 ...

  6. 初涉hash

    今天和朋友讨论一个问题 有两百亿个数,我给出一个数,找到这两百亿个数中两数相加等于它的组合.要求时间复杂度为线性,空间2G 解决思路是开一个hash表比如a[1000]将所有数存入hash表中,a[i ...

  7. 激!GSS系列

    #include <cstdio> ; ; inline int max(int, int); inline int getint(); inline void putint(int); ...

  8. javascript中bind函数的作用

    javascript的bind的作用 <!DOCTYPE html> <html> <head> <meta charset="utf-8" ...

  9. 《Matrix Computation 3rd》读书笔记——第2章 矩阵分析

  10. 推荐的Android ORM框架

    1. OrmLite OrmLite 不是 Android 平台专用的ORM框架,它是Java ORM.支持JDBC连接,Spring以及Android平台.语法中广泛使用了注解(Annotation ...