题目地址:HDU 3452

最小割水题。

源点为根节点。再另设一汇点,汇点与叶子连边。

对叶子结点的推断是看度数是否为1.

代码例如以下:

  1. #include <iostream>
  2. #include <cstdio>
  3. #include <string>
  4. #include <cstring>
  5. #include <stdlib.h>
  6. #include <math.h>
  7. #include <ctype.h>
  8. #include <queue>
  9. #include <map>
  10. #include <set>
  11. #include <algorithm>
  12.  
  13. using namespace std;
  14. const int INF=0x3f3f3f3f;
  15. int head[3000], source, sink, nv, cnt, deg[2000];
  16. int cur[3000], num[3000], d[3000], pre[3000];
  17. struct node
  18. {
  19. int u, v, cap, next;
  20. } edge[1000000];
  21. void add(int u, int v, int cap)
  22. {
  23. edge[cnt].v=v;
  24. edge[cnt].cap=cap;
  25. edge[cnt].next=head[u];
  26. head[u]=cnt++;
  27.  
  28. edge[cnt].v=u;
  29. edge[cnt].cap=0;
  30. edge[cnt].next=head[v];
  31. head[v]=cnt++;
  32. }
  33. void bfs()
  34. {
  35. memset(num,0,sizeof(num));
  36. memset(d,-1,sizeof(d));
  37. queue<int>q;
  38. q.push(sink);
  39. d[sink]=0;
  40. num[0]=1;
  41. while(!q.empty())
  42. {
  43. int u=q.front();
  44. q.pop();
  45. for(int i=head[u]; i!=-1; i=edge[i].next)
  46. {
  47. int v=edge[i].v;
  48. if(d[v]==-1)
  49. {
  50. d[v]=d[u]+1;
  51. num[d[v]]++;
  52. q.push(v);
  53. }
  54. }
  55. }
  56. }
  57. int isap()
  58. {
  59. memcpy(cur,head,sizeof(cur));
  60. int flow=0, u=pre[source]=source, i;
  61. bfs();
  62. while(d[source]<nv)
  63. {
  64. if(u==sink)
  65. {
  66. int f=INF, pos;
  67. for(i=source; i!=sink; i=edge[cur[i]].v)
  68. {
  69. if(f>edge[cur[i]].cap)
  70. {
  71. f=edge[cur[i]].cap;
  72. pos=i;
  73. }
  74. }
  75. for(i=source; i!=sink; i=edge[cur[i]].v)
  76. {
  77. edge[cur[i]].cap-=f;
  78. edge[cur[i]^1].cap+=f;
  79. }
  80. flow+=f;
  81. u=pos;
  82. }
  83. for(i=cur[u]; i!=-1; i=edge[i].next)
  84. {
  85. if(d[edge[i].v]+1==d[u]&&edge[i].cap)
  86. break;
  87. }
  88. if(i!=-1)
  89. {
  90. cur[u]=i;
  91. pre[edge[i].v]=u;
  92. u=edge[i].v;
  93. }
  94. else
  95. {
  96. if(--num[d[u]]==0) break;
  97. int mind=nv;
  98. for(i=head[u]; i!=-1; i=edge[i].next)
  99. {
  100. if(mind>d[edge[i].v]&&edge[i].cap)
  101. {
  102. mind=d[edge[i].v];
  103. cur[u]=i;
  104. }
  105. }
  106. d[u]=mind+1;
  107. num[d[u]]++;
  108. u=pre[u];
  109. }
  110. }
  111. return flow;
  112. }
  113. int main()
  114. {
  115. int n, i, u, v, w;
  116. while(scanf("%d%d",&n,&source)!=EOF&&n&&source)
  117. {
  118. memset(head,-1,sizeof(head));
  119. memset(deg,0,sizeof(deg));
  120. cnt=0;
  121. sink=n+1;
  122. nv=sink+1;
  123. for(i=1;i<n;i++)
  124. {
  125. scanf("%d%d%d",&u,&v,&w);
  126. add(u,v,w);
  127. add(v,u,w);
  128. deg[u]++;
  129. deg[v]++;
  130. }
  131. for(i=1;i<=n;i++)
  132. {
  133. if(i!=source&°[i]==1)
  134. {
  135. add(i,sink,INF);
  136. }
  137. }
  138. printf("%d\n",isap());
  139. }
  140. return 0;
  141. }

HDU 3452 Bonsai(网络流之最小割)的更多相关文章

  1. 【BZOJ2229】[ZJOI2011]最小割(网络流,最小割树)

    [BZOJ2229][ZJOI2011]最小割(网络流,最小割树) 题面 BZOJ 洛谷 题解 戳这里 那么实现过程就是任选两点跑最小割更新答案,然后把点集划分为和\(S\)联通以及与\(T\)联通. ...

  2. 【CF331E】Biologist(网络流,最小割)

    [CF331E]Biologist(网络流,最小割) 题面 洛谷 翻译: 有一个长度为\(n\)的\(01\)串,将第\(i\)个位置变为另外一个数字的代价是\(v_i\). 有\(m\)个要求 每个 ...

  3. 【BZOJ1391】Order(网络流,最小割)

    [BZOJ1391]Order(网络流,最小割) 题面 BZOJ权限题... 良心洛谷 题目描述 有N个工作,M种机器,每种机器你可以租或者买过来. 每个工作包括若干道工序,每道工序需要某种机器来完成 ...

  4. 【BZOJ3144】切糕(网络流,最小割)

    [BZOJ3144]切糕(网络流,最小割) 题面 BZOJ 题解 这样的类型很有趣 先不考虑相邻距离差不能超过\(D\)的限制 我们考虑答案,显然就是在每个位置选一个最小的高度割就行了 化成最小割的模 ...

  5. HDU 5889 Barricade 【BFS+最小割 网络流】(2016 ACM/ICPC Asia Regional Qingdao Online)

    Barricade Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total S ...

  6. 【HDU 5855】Less Time, More profit(网络流、最小割、最大权闭合子图)

    Less Time, More profit Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/O ...

  7. HDU 4859(Bestcoder #1 1003)海岸线(网络流之最小割)

    题目地址:HDU4859 做了做杭电多校,知识点会的太少了.还是将重点放在刷专题补知识点上吧,明年的多校才是重点. 这题题目求的最长周长.能够试想一下,这里的海岸线一定是在"."和 ...

  8. HDU 4289:Control(最小割)

    http://acm.hdu.edu.cn/showproblem.php?pid=4289 题意:有n个城市,m条无向边,小偷要从s点开始逃到d点,在每个城市安放监控的花费是sa[i],问最小花费可 ...

  9. [bzoj1497][NOI2006]最大获利_网络流_最小割

    最大获利 bzoj-1497 题目大意:可以建立一个点,花费一定的代价:将已经建立的两个点之间连边,得到一定收益.有些节点之间是不允许连边的. 注释:1<=点数<=5,000,1<= ...

随机推荐

  1. 【HDOJ】4412 Sky Soldiers

    1. 题目描述有$k$个伞兵跳伞,有$m$个汇点.当伞兵着陆后,需要走向离他最近的汇点.如何选择这$m$个结点,可以使得士兵最终行走的距离的期望最小.求这个最小的期望. 2. 基本思路假设已经选好了这 ...

  2. Git版本控制使用介绍

    Git是什么? Git是一款免费.开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目. Git与SVN的最主要的区别? Git是分布式的,SVN不是 Git没有一个全局的版本号,而SVN有 ...

  3. poj1026Cipher(置换群)

    链接 找循环节 然后所有子循环节的最小公倍数就是总的循环节 找结果的时候也按一个个置换来进行转换 不然也TLE #include <iostream> #include<cstdio ...

  4. php 生成类的对象 $a=new test();

    程序 <?php class test { ... } $a=new test(); 1.BNF 范式 start: variable '=' expr ';' expr: new_expr ; ...

  5. 如何在Azure Websites中配置PHP从而改变系统默认时区

    Shirley_Wang  Tue, Mar 3 2015 7:29 AM Azure Website为我们提供了可高度扩展的网站部署平台.由于Website是PaaS(平台即服务)层的服务,当用户把 ...

  6. apache开源项目--Camel

    Apache Camel 是一个非常强大的基于规则的路由以及媒介引擎,该引擎提供了一个基于POJO的 企业应用模式(Enterprise Integration Patterns)的实现,你可以采用其 ...

  7. Windows 下目录及文件向Linux同步

    本文解决的是Windows 下目录及文件向Linux同步的问题,Windows向 Windows同步的请参考:http://www.idcfree.com/article-852-1.html 环境介 ...

  8. (七)学习CSS之filter属性

    filter: alpha(opacity=,finishopacity=,style=)??? alpha是来设置透明度的,它的基本属性是filter:alpha(opacity,finishopa ...

  9. Button 自定义(一)-shape

    需求:自定义Button,使用系统自定义Shape: 效果图: 1.默认状态 2.选中状态 实现分析: 1.目录结构: 代码实现: 1.button_normal.xml <?xml versi ...

  10. CVTE公司面经

    1.先是网上测评,通过后通知你参加一面. 2.关于一面:一共进行了10分钟左右,三四个人一起面,没有问什么技术. 一共问了3个问题:a.你为什么选择我们公司的这个职位.我答的大概意思是本科研究生期间, ...