好长时间没有写网络流了,感觉好手生.
对于本题,设一个源点 $s$ 和 $t$.
1.由 $s$ 向每个点连一条没有下界,容量为无限大的边,表示以该点为起点.
2.由每个点向 $t$ 连一条没有下界,容量为无限大的边,表示以该点为终点.
为了保证每条原图中得边都能被覆盖掉,再将原图中的边连一条无上界,下界为 1 的边.
最后,跑一遍最小流即可.

Code:

  1. // luogu-judger-enable-o2
  2. #include<bits/stdc++.h>
  3. using namespace std;
  4. #define setIO(s) freopen(s".in","r",stdin)
  5. #define maxn 2000
  6. #define inf 1000000
  7. int tot;
  8. void ini(){ tot=1000; }
  9. int newnode(){ return ++tot; }
  10. struct Edge{
  11. int from,to,cap;
  12. Edge(int a=0,int b=0,int c=0):from(a),to(b),cap(c){}
  13. };
  14. vector<int>G[maxn];
  15. vector<Edge>edges;
  16. void addedge(int u,int v,int c){
  17. edges.push_back(Edge(u,v,c));
  18. edges.push_back(Edge(v,u,0));
  19. int m=edges.size();
  20. G[u].push_back(m-2);
  21. G[v].push_back(m-1);
  22. }
  23. namespace maxflow{
  24. int s,t;
  25. int d[maxn],vis[maxn];
  26. int current[maxn];
  27. queue<int>Q;
  28. int BFS(){
  29. memset(vis,0,sizeof(vis));
  30. vis[s]=1,d[s]=0;
  31. Q.push(s);
  32. while(!Q.empty()){
  33. int u=Q.front();Q.pop();
  34. int sz=G[u].size();
  35. for(int i=0;i<sz;++i){
  36. Edge v=edges[G[u][i]];
  37. if(!vis[v.to]&&v.cap>0) {
  38. d[v.to]=d[u]+1,vis[v.to]=1;
  39. Q.push(v.to);
  40. }
  41. }
  42. }
  43. return vis[t];
  44. }
  45. int dfs(int x,int cur){
  46. if(x!=t){
  47. int f,flow=0,sz=G[x].size();
  48. for(int i=current[x];i<sz;++i){
  49. current[x]=i;
  50. Edge r = edges[G[x][i]];
  51. if(d[r.to]==d[x]+1&&r.cap>0) {
  52. f=dfs(r.to,min(cur,r.cap));
  53. if(f>0){
  54. flow+=f,cur-=f;
  55. edges[G[x][i]].cap-=f,edges[G[x][i]^1].cap+=f;
  56. }
  57. }
  58. if(!cur) break;
  59. }
  60. return flow;
  61. }
  62. else return cur;
  63. }
  64. int GET(){
  65. int ans=0;
  66. while(BFS()) {
  67. memset(current,0,sizeof(current));
  68. ans+=dfs(s,inf);
  69. }
  70. return ans;
  71. }
  72. };
  73. int main(){
  74. //setIO("input");
  75. ini();
  76. int n,s,t,ss,tt;
  77. s=0,t=newnode(),ss=newnode(),tt=newnode();
  78. scanf("%d",&n);
  79. for(int i=1,m=0,v;i<=n;++i) {
  80. scanf("%d",&m);
  81. while(m--){
  82. scanf("%d",&v);
  83. addedge(i,v,inf-1),addedge(s,i,inf),addedge(v,t,inf);
  84. addedge(ss,v,1),addedge(i,tt,1);
  85. }
  86. }
  87. int rec=edges.size();
  88. addedge(t,s,inf);
  89. maxflow::s=ss,maxflow::t=tt;
  90. maxflow::GET();
  91. int ans1=edges[rec^1].cap;
  92. edges[rec^1].cap=edges[rec].cap=0;
  93. maxflow::s=t, maxflow::t=s;
  94. ans1-=maxflow::GET();
  95. printf("%d",ans1);
  96. return 0;
  97. }

  

Bzoj 2502: 清理雪道 有上下界网络流_最小流的更多相关文章

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

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

  2. BZOJ 2502: 清理雪道 | 有上下界最小流

    #include<cstdio> #include<algorithm> #include<cstring> #include<queue> #defi ...

  3. P4843 清理雪道(上下界网络流)

    P4843 清理雪道 上下界最小流 我们先搞一遍上下界可行流(转) 回忆上下界最大流的写法:在可行流的残量网络$s\ -\ t$上跑最大流,答案为可行流$+$残量网络的最大流 那么上下界最小流的写法呢 ...

  4. BZOJ 2502: 清理雪道

    BZOJ 2502: 清理雪道 标签(空格分隔): OI-BZOJ OI-最小流 OI-上下界网络流 Time Limit: 10 Sec Memory Limit: 128 MB Descripti ...

  5. hdu 4940 Destroy Transportation system( 无源汇上下界网络流的可行流推断 )

    题意:有n个点和m条有向边构成的网络.每条边有两个花费: d:毁坏这条边的花费 b:重建一条双向边的花费 寻找这样两个点集,使得点集s到点集t满足 毁坏全部S到T的路径的费用和 > 毁坏全部T到 ...

  6. HDU3157 Crazy Circuits(有源汇流量有上下界网络的最小流)

    题目大概给一个电路,电路上有n+2个结点,其中有两个分别是电源和负载,结点们由m个单向的部件相连,每个部件都有最少需要的电流,求使整个电路运转需要的最少电流. 容量网络的构建很容易,建好后就是一个有源 ...

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

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

  8. 【BZOJ-2502】清理雪道 有上下界的网络流(有下界的最小流)

    2502: 清理雪道 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 594  Solved: 318[Submit][Status][Discuss] ...

  9. 【bzoj2502】清理雪道 有上下界最小流

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

随机推荐

  1. 发现被坑了,从来没看到说java的Date一旦实例化时间就不会变了

    java中使用Date对象获取系统当前时间,然而我就没看到哪篇教程告诉我说Date创建对象之后其中的时间是不会变的!!! 一开始我写了类似于下边这样的代码,希望每隔一段时间显示一次时间 Date d= ...

  2. 如何批量导入excel数据至数据库(MySql)--工具phpMyAdmin

    之前由于数据储存使用excel保存了所有数据,经过初步数据筛选,数据量近4000条.一条一条录入数据库显然是不可行的.以下是我所操作的步骤: 1.只保留excel的数据部分,去除第一行的具体说明 2. ...

  3. Spring MVC @PathVariable with dot (.) is getting truncated.

    转自:http://stackoverflow.com/questions/3526523/spring-mvc-pathvariable-getting-truncated (这里只截取了问题,和笔 ...

  4. 训练1-A

    一块花布条,里面有些图案,另有一块直接可用的小饰条,里面也有一些图案.对于给定的花布条和小饰条,计算一下能从花布条中尽可能剪出几块小饰条来呢? Input 输入中含有一些数据,分别是成对出现的花布条和 ...

  5. BA-通讯总线-百通1419a和9841

    百通1419A线缆的简单介绍: Belden1419A- Belden电缆线1419A 多股导体—低容计算机电缆 FOR EIA RS-232/422 Belden 1419A是24 AWG(7*32 ...

  6. EJB学习(四)——Enterprise Bean(企业Bean)和Entity Bean(实体Bean)

        一.为什么使用EJB ? 企业Bean执行在EJB容器中.企业Bean实际上就是一个封装了业务逻辑的Java类,那么我们为什么要使用EJB呢 ? 1.最重要的原因:分布式.简要的说,分布式能够 ...

  7. 畅通project续HDU杭电1874【dijkstra算法 || SPFA】

    http://acm.hdu.edu.cn/showproblem.php?pid=1874 Problem Description 某省自从实行了非常多年的畅通project计划后.最终修建了非常多 ...

  8. AS常见的错误

    导入的项目使用的gradle版本和本地的要一致,不然会提示类似"Minimum supported Gradle version is 3.3. Current version is 2.1 ...

  9. 前端 自定义format函数

    为字符串创建format方法,用于字符串格式化  {# 前端没有字符串占位符%s的替代方法,以下是自定义字符串替换的方法,以后前端拓展方法都可以使用下面的形式 #} String.prototype. ...

  10. HTML5 格式化方式以及应用

    <b>加粗字体 <big>定义大号字体 <em>定义着重文字 <i>定义斜体字 <small>定义小号字体 <strong>定义 ...