有源汇有上下界的最小可行流。

YY一下建图应该很好搞吧(?

就是对于每个雪道都是[1,inf]然后源点到所有点都是[0,inf]所有点到汇点都是[0,inf]

这样的话跑一个有源汇上下界最小可行流就可以了

有关于这个可以看liu_runda神犇的介绍 非常直观易懂

最开始先建超级源汇 跑可行流得到一个基础流量 然后反向在残余网络上跑最大流减去即可

注意最后的时候是需要反向在残余网络上跑的 不要忘记交换源汇

代码。

  1. //Love and Freedom.
  2. #include<cstdio>
  3. #include<cstring>
  4. #include<algorithm>
  5. #include<cmath>
  6. #include<queue>
  7. #define inf 20021225
  8. #define ll long long
  9. #define N 200
  10. #define M 40000
  11. using namespace std;
  12.  
  13. struct edge{int lt,to,f;}e[M<<];
  14. int cnt=,in[N],dep[N],s,t,ss,tt;
  15. queue<int> q;
  16. void add(int x,int y,int f)
  17. {
  18. e[++cnt].to = y; e[cnt].lt = in[x]; in[x] = cnt; e[cnt].f = f;
  19. e[++cnt].to = x; e[cnt].lt = in[y]; in[y] = cnt; e[cnt].f = ;
  20. }
  21. bool bfs()
  22. {
  23. while(!q.empty()) q.pop();
  24. q.push(s); memset(dep,,sizeof(dep)); dep[s] = ;
  25. while(!q.empty())
  26. {
  27. int x = q.front(); q.pop();
  28. for(int i=in[x];i;i=e[i].lt)
  29. {
  30. int y = e[i].to; if(dep[y] || !e[i].f) continue;
  31. dep[y] = dep[x]+; q.push(y);
  32. if(y==t) return ;
  33. }
  34. }
  35. return ;
  36. }
  37. int dfs(int x,int f)
  38. {
  39. if(!f || x==t) return f;
  40. int flow = f;
  41. for(int i=in[x];i;i=e[i].lt)
  42. {
  43. int y = e[i].to;
  44. if(dep[y] == dep[x]+ && e[i].f && flow)
  45. {
  46. int cur = dfs(y,min(flow,e[i].f));
  47. e[i^].f += cur; e[i].f -= cur;
  48. flow -= cur; if(!flow) return f;
  49. }
  50. }
  51. dep[x] = -; return f-flow;
  52. }
  53. int dinic()
  54. {
  55. int ans = ;
  56. while(bfs()) ans+=dfs(s,inf);
  57. return ans;
  58. }
  59. int most[M],f[N],n;
  60. void del(int x)
  61. {
  62. for(int i=in[x];i;i=e[i].lt)
  63. e[i].f = e[i^].f = ;
  64. }
  65. int main()
  66. {
  67. s = N-; t = s+; ss = t+; tt = ss+;
  68. scanf("%d",&n);
  69. for(int x=;x<=n;x++)
  70. {
  71. int i,y; scanf("%d",&i);
  72. while(i--)
  73. {
  74. scanf("%d",&y); f[y]++; f[x]--;
  75. add(x,y,inf);
  76. }
  77. }
  78. for(int x=;x<=n;x++){add(s,x,inf); add(x,t,inf);}
  79. for(int i=;i<=n;i++)
  80. {
  81. if(f[i]<) add(i,tt,-f[i]);
  82. else add(ss,i,f[i]);
  83. }
  84. add(t,s,inf); int tmps = s,tmpt = t;
  85. s = ss; t = tt; int flow = dinic();
  86. flow = e[cnt].f; e[cnt].f = e[cnt-].f = ;
  87. del(ss); del(tt); s = tmpt,t = tmps;
  88. printf("%d\n",flow-dinic());
  89. return ;
  90. }

洛谷4843 BZOJ2502 清理雪道的更多相关文章

  1. [BZOJ2502]清理雪道

    [BZOJ2502]清理雪道 试题描述 滑雪场坐落在FJ省西北部的若干座山上. 从空中鸟瞰,滑雪场可以看作一个有向无环图,每条弧代表一个斜坡(即雪道),弧的方向代表斜坡下降的方向. 你的团队负责每周定 ...

  2. BZOJ2502:清理雪道(有上下界最小流)

    Description        滑雪场坐落在FJ省西北部的若干座山上. 从空中鸟瞰,滑雪场可以看作一个有向无环图,每条弧代表一个斜坡(即雪道),弧的方向代表斜坡下降的方向. 你的团队负责每周定时 ...

  3. [BZOJ2502]清理雪道 有上下界网络流(最小流)

    2502: 清理雪道 Time Limit: 10 Sec  Memory Limit: 128 MB Description        滑雪场坐落在FJ省西北部的若干座山上. 从空中鸟瞰,滑雪场 ...

  4. [BZOJ2502]清理雪道解题报告|带下界的最小流

    滑雪场坐落在FJ省西北部的若干座山上. 从空中鸟瞰,滑雪场可以看作一个有向无环图,每条弧代表一个斜坡(即雪道),弧的方向代表斜坡下降的方向. 你的团队负责每周定时清理雪道.你们拥有一架直升飞机,每次飞 ...

  5. 【上下界网络流】bzoj2502: 清理雪道

    模型:无源汇有上下界可行流 LJN:模板题吧 Description        滑雪场坐落在FJ省西北部的若干座山上. 从空中鸟瞰,滑雪场可以看作一个有向无环图,每条弧代表一个斜坡(即雪道),弧的 ...

  6. 洛谷2943 [USACO09MAR]清理Cleaning Up——转变枚举内容的dp

    题目:https://www.luogu.org/problemnew/show/P2943 一下想到n^2.然后不会了. 看过TJ之后似乎有了新的认识. n^2的冗余部分在于当后面那部分的种类数一样 ...

  7. bzoj2502: 清理雪道(有源汇有上下界最小流)

    传送门 别说话,自己看,我不会->这里 我这里用的建图方法是先跑一次最大流,连上$(t,s,inf)$之后再跑一遍,然后答案就是之前连的那条边的反向边的流量 据说还有种方法是连上$(t,s,in ...

  8. bzoj2502清理雪道

    传送门 好题啊,由于每个点既可以进,也可以出,就可以新建一个源点和汇点,对于每个点都连边,然后就是最小流板子了. 代码: #include<cstdio> #include<iost ...

  9. [bzoj2502]清理雪道[上下界网络流]

    bzoj状态里有两种,一种时间是个位数,一种是四位数,我就是四位数的那种,,,估计都是看了hzwer.. #include <bits/stdc++.h> #define INF 0x3f ...

随机推荐

  1. 20180803-Java 流(Stream)、文件(File)和IO

    Java 流(Stream).文件(File)和IO 下面的程序示范了用read()方法从控制台不断读取字符直到用户输入"q". // 使用BufferedReader 在控制台读 ...

  2. Oracle 中 not exists (select 'X' ...) 的含义

    select a.col1,a.col2 from temp1 a where not exists (select 'X' from temp2 b where b.col2 = a.col1);s ...

  3. Trailing Zeroes (III) -;lightoj 1138

    Trailing Zeroes (III)   PDF (English) Statistics Forum Time Limit: 2 second(s) Memory Limit: 32 MB Y ...

  4. 从React渲染流程分析Diff算法

    1.什么是虚拟DOM 在React中,render执行的结果得到的并不是真正的DOM节点,结果仅仅是轻量级的JavaScript对象,我们称之为virtual DOM. 简单的说,其实所谓的virtu ...

  5. Docker 里面新建mysql 容器

    1.获取MySQL镜像, a.直接从docker hub 下载docker镜像 docker pull +镜像名称 b.从别的项目上把镜像export出来 dockr load  i + 镜像的TAR ...

  6. Oracle-创建索引分区

    对大数据量索引进行分区同样能够优化应用系统的性能.一般来说,如果索引所对应的表的数据量非常大,比如几百万甚至上千万条数据,则索引也会占用很大的空间,这时,建议对索引进行分区. Oracle索引分区分为 ...

  7. 《图解设计模式》读书笔记2-2 Factory Method模式

    目录 类图 代码 角色介绍 思想 类图 代码 //产品类,任意可"use"的产品都可继承该类 public abstract class Product { public abst ...

  8. Linux 路由表详解及 route 命令详解

    参考资料 Linux 内核的路由表 通过 route 命令查看 Linux 内核的路由表: [root@VM_139_74_centos ~]# route Kernel IP routing tab ...

  9. Spring MVC浅析

    讲到MVC,想必大家都很熟悉,就是将数据模型.视图.控制器进行分离,做到分工明确,在Spring的帮助下,Spring MVC 更是做到了充分的解耦,因为大部分的资源都由Spring进行管理,为Spr ...

  10. TensorFlow学习笔记1-入门

    TensorFlow学习笔记1-入门 作者: YunYuan *** 写在前面 本笔记是我学习TensorFlow官方文档中文版的读书笔记,由于尚未搭建好Github的个人博客的评论功能,故尚不方便与 ...