对于原有边,流区间是(1,inf),按着原边连,然后再连(s,i,(0,inf)),(i,t,(0,inf))表示任意位置进出雪场

按着这个建出新图

然后最小流的方法是先跑可行流,设ans为(t,s,(0,inf))的流量,然后取消这条边,跑从原来的t-s的最大流为ans2,答案就是ans-ans2

  1. #include<iostream>
  2. #include<cstdio>
  3. #include<cstring>
  4. #include<queue>
  5. using namespace std;
  6. const int N=205;
  7. int n,h[N],cnt=1,le[N],s,t,d[N],la0,la1;
  8. struct qwe
  9. {
  10. int ne,to,va;
  11. }e[N*N*10];
  12. int read()
  13. {
  14. int r=0,f=1;
  15. char p=getchar();
  16. while(p>'9'||p<'0')
  17. {
  18. if(p=='-')
  19. f=-1;
  20. p=getchar();
  21. }
  22. while(p>='0'&&p<='9')
  23. {
  24. r=r*10+p-48;
  25. p=getchar();
  26. }
  27. return r*f;
  28. }
  29. void add(int u,int v,int w)
  30. {
  31. cnt++;
  32. e[cnt].ne=h[u];
  33. e[cnt].to=v;
  34. e[cnt].va=w;
  35. h[u]=cnt;
  36. }
  37. void ins(int u,int v,int w)
  38. {
  39. add(u,v,w);
  40. add(v,u,0);
  41. }
  42. void wk(int u,int v,int l,int r)
  43. {
  44. d[u]-=l,d[v]+=l;
  45. ins(u,v,r-l);
  46. }
  47. bool bfs()
  48. {
  49. memset(le,0,sizeof(le));
  50. queue<int>q;
  51. le[s]=1;
  52. q.push(s);
  53. while(!q.empty())
  54. {
  55. int u=q.front();
  56. q.pop();
  57. for(int i=h[u];i;i=e[i].ne)
  58. if(e[i].va>0&&!le[e[i].to])
  59. {
  60. le[e[i].to]=le[u]+1;
  61. q.push(e[i].to);
  62. }
  63. }
  64. return le[t];
  65. }
  66. int dfs(int u,int f)
  67. {
  68. if(u==t||!f)
  69. return f;
  70. int us=0;
  71. for(int i=h[u];i&&us<f;i=e[i].ne)
  72. if(e[i].va>0&&le[e[i].to]==le[u]+1)
  73. {
  74. int t=dfs(e[i].to,min(e[i].va,f-us));
  75. e[i].va-=t;
  76. e[i^1].va+=t;
  77. us+=t;
  78. }
  79. if(!us)
  80. le[u]=0;
  81. return us;
  82. }
  83. int dinic()
  84. {
  85. int r=0;
  86. while(bfs())
  87. r+=dfs(s,1e9);
  88. return r;
  89. }
  90. int main()
  91. {
  92. n=read();
  93. for(int i=1;i<=n;i++)
  94. {
  95. int m=read();
  96. for(int j=1;j<=m;j++)
  97. {
  98. int x=read();
  99. wk(i,x,1,1e5);
  100. }
  101. }
  102. for(int i=1;i<=n;i++)
  103. wk(n+1,i,0,1e5),wk(i,n+2,0,1e5);
  104. s=0,t=n+3;
  105. for(int i=1;i<=n+2;i++)
  106. {
  107. if(d[i]>0)
  108. ins(s,i,d[i]);
  109. else
  110. ins(i,t,-d[i]);
  111. }
  112. la1=h[n+2];
  113. add(n+2,n+1,1e9);
  114. la0=h[n+1];
  115. add(n+1,n+2,0);
  116. dinic();
  117. int ans=e[cnt].va;
  118. h[n+2]=la1,h[n+1]=la0;
  119. s=n+2,t=n+1;
  120. printf("%d\n",ans-dinic());
  121. return 0;
  122. }

bzoj 2502: 清理雪道【有上下界有源汇最小流】的更多相关文章

  1. Bzoj 2502: 清理雪道 有上下界网络流_最小流

    好长时间没有写网络流了,感觉好手生.对于本题,设一个源点 $s$ 和 $t$.1.由 $s$ 向每个点连一条没有下界,容量为无限大的边,表示以该点为起点.2.由每个点向 $t$ 连一条没有下界,容量为 ...

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

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

  3. 【BZOJ2502】清理雪道 有上下界的网络流 最小流

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

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

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

  5. bzoj 3876: [Ahoi2014&Jsoi2014]支线剧情【有上下界有源汇最小费用最大流】

    每条边流量有下界有费用,很显然是有上下界有源汇最小费用最大流 连边(s,1,(0,inf),0),(i,t,(0,inf),0),表示从1出发inf次从每个点结束inf次 连边(i,j,(1,inf) ...

  6. bzoj 2055: 80人环游世界【有上下界有源汇最小费用最大流】

    连有上下界的边(ss,i,(0,m),0),(i',t,(0,m),0),表示从任意点开始和结束 连(i,j,(0,m),d[i][j]),表示可以买票飞过去 连(i,i',(v[i],v[i]),0 ...

  7. BZOJ 2502: 清理雪道

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

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

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

  9. ZOJ 1314 Reactor Cooling | 上下界无源汇可行流

    ZOJ 1314 Reactor Cooling | 上下界无源汇可行流 题意 有一个网络,每条边有流量的上界和下界,求一种方案,让里面的流可以循环往复地流动起来. 题解 上下界无源汇可行流的模型: ...

随机推荐

  1. RS-485接口的防护电路设计

    RS-485总线标准是安防系统设备上应用最为广泛的物理层协议之一.RS-485的主要特点:支持远距离传输,长达4000英尺:双向信号差分传输,提高信号的噪音抑制能力,并且允许一条总线上可以挂接多个发射 ...

  2. 【百度之星初赛A】路径交 LCA+线段树

    [百度之星初赛A]路径交 Problem Description 给定一棵n个点的树,以及m条路径,每次询问第L条到第R条路径的交集部分的长度(如果一条边同时出现在2条路径上,那么它属于路径的交集). ...

  3. mybatis学习总结(三)——增删查改

    映射器是mybatis的基础和核心,下面学习下映射器的使用 映射器的主要元素 select  查询语句,可以自定义参数和返回结果集 insert  插入语句,返回一个整数,代表插入的条数 update ...

  4. HDFS被设计成能够在一个大集群中跨机器可靠地存储超大文件

    HDFS被设计成能够在一个大集群中跨机器可靠地存储超大文件.它将每个文件存储成一系列的数据块,除了最后一个,所有的数据块都是同样大小的.为了容错,文件的所有数据块都会有副本.每个文件的数据块大小和副本 ...

  5. Performance Tuning Using Linux Process Management Commands

    [root@bigdata-server-02 /]# ps --help all Usage: ps [options] Basic options: -A, -e all processes -a ...

  6. please add a 'mainClass’ property

    when build an spring project with this command: mvn spring-boot:run there will may show an error mes ...

  7. Qt中的打印操作

    Qt中对打印的支持是有一个独立的printsupport模块来完成的,所以,要想在程序中使用Qt的打印功能,必须先在pro文件中添加下面这句代码: QT += printsupport在这个模块中,提 ...

  8. TCP/IP笔记之OSI和TCP/IP

  9. 解决Windows x64bit环境下无法使用PLSQL Developer连接到Oracle DB中的问题

    本文是原创文章,转载请注明出处: http://blog.csdn.net/msdnchina/article/details/46416455 解决Windows x64bit环境下无法使用PLSQ ...

  10. GNU linux 中makefile那点事

    转自陈皓: http://bbs.chinaunix.net/viewthread.php?tid=408225 概述—— 什么是makefile?或许很多Winodws的程序员都不知道这个东西,因为 ...