思路一下就上来了,叶子向汇点连边,inf保证不会成为割,跑根到汇点最小割即可。注意无向树双向建边。基础题,分分钟1A:

  1. #include<iostream>
  2. #include<queue>
  3. #include<cstdio>
  4. #include<cstring>
  5. #include<set>
  6. #include<vector>
  7. using namespace std;
  8. const int inf=0x3f3f3f3f;
  9. const int maxv=1005,maxe=10000;
  10. int nume=0;int head[maxv];int e[maxe][3];
  11. void inline adde(int i,int j,int c)
  12. {
  13. e[nume][0]=j;e[nume][1]=head[i];head[i]=nume;
  14. e[nume++][2]=c;
  15. e[nume][0]=i;e[nume][1]=head[j];head[j]=nume;
  16. e[nume++][2]=0;
  17. }
  18. int ss,tt,n,m;
  19. int vis[maxv];int lev[maxv];
  20. bool bfs()
  21. {
  22. for(int i=0;i<maxv;i++)
  23. vis[i]=lev[i]=0;
  24. queue<int>q;
  25. q.push(ss);
  26. vis[ss]=1;
  27. while(!q.empty())
  28. {
  29. int cur=q.front();
  30. q.pop();
  31. for(int i=head[cur];i!=-1;i=e[i][1])
  32. {
  33. int v=e[i][0];
  34. if(!vis[v]&&e[i][2]>0)
  35. {
  36. lev[v]=lev[cur]+1;
  37. vis[v]=1;
  38. q.push(v);
  39. }
  40. }
  41. }
  42. return vis[tt];
  43. }
  44. int dfs(int u,int minf)
  45. {
  46. if(u==tt||minf==0)return minf;
  47. int sumf=0,f;
  48. for(int i=head[u];i!=-1&&minf;i=e[i][1])
  49. {
  50. int v=e[i][0];
  51. if(lev[v]==lev[u]+1&&e[i][2]>0)
  52. {
  53. f=dfs(v,minf<e[i][2]?minf:e[i][2]);
  54. e[i][2]-=f;e[i^1][2]+=f;
  55. sumf+=f;minf-=f;
  56. }
  57. }
  58. if(!sumf) lev[u]=-1;
  59. return sumf;
  60. }
  61. int dinic()
  62. {
  63. int sum=0;
  64. while(bfs())sum+=dfs(ss,inf);
  65. return sum;
  66. };
  67. int ind[maxv];
  68. void read_build()
  69. {
  70. int aa,bb,cc;
  71. for(int i=0;i<n-1;i++)
  72. {
  73. scanf("%d%d%d",&aa,&bb,&cc);
  74. adde(aa,bb,cc);
  75. adde(bb,aa,cc);
  76. ind[aa]++;ind[bb]++;
  77. }
  78. for(int i=1;i<=n;i++)
  79. if(i!=m&&ind[i]==1)
  80. {
  81. adde(i,tt,inf);
  82. }
  83.  
  84. /* for(int i=0;i<=tt;i++)
  85. for(int j=head[i];j!=-1;j=e[j][1])
  86. {
  87. if(j%2==0)
  88. printf("%d->%d:%d\n",i,e[j][0],e[j][2]);
  89. }*/
  90. }
  91. void init()
  92. {
  93. nume=0;
  94. ss=m;tt=n+1;
  95. for(int i=0;i<=tt;i++)
  96. {
  97. head[i]=-1;ind[i]=0;
  98. }
  99. }
  100. int main()
  101. {
  102. while(~scanf("%d%d",&n,&m)&&(n||m))
  103. {
  104. init();
  105. read_build();
  106. int ans;
  107. ans=dinic();
  108. printf("%d\n",ans);
  109. }
  110. return 0;
  111. }

hdu3452 无向树去掉最小的边集使任何叶子与根不连通 / 最小割的更多相关文章

  1. hdu3452 无向树去掉最小的边集使不论什么叶子与根不连通 / 最小割

    思路一下就上来了,叶子向汇点连边,inf保证不会成为割,跑根到汇点最小割就可以.注意无向树双向建边.基础题,分分钟1A: #include<iostream> #include<qu ...

  2. SPOJ 1479 +SPOJ 666 无向树最小点覆盖 ,第二题要方案数,树形dp

    题意:求一颗无向树的最小点覆盖. 本来一看是最小点覆盖,直接一下敲了二分图求最小割,TLE. 树形DP,叫的这么玄乎,本来是线性DP是线上往前\后推,而树形DP就是在树上,由叶子结点状态向根状态推. ...

  3. 伪列:Oracle显示查询结果前几条记录用rownum<=。去掉重复记录,保留最早录入记录:取出最小ROWID

    显示6-10行记录: 去掉重复记录,保留最早录入记录:取出最小ROWID SELECT deptno,dname,loc,min(ROWID) FROM dept GROUP BY deptno,dn ...

  4. LeetCode 453. 最小移动次数使数组元素相等(Minimum Moves to Equal Array Elements) 47

    453. 最小移动次数使数组元素相等 453. Minimum Moves to Equal Array Elements 题目描述 给定一个长度为 n 的非空整数数组,找到让数组所有元素相等的最小移 ...

  5. Java实现 LeetCode 453 最小移动次数使数组元素相等

    453. 最小移动次数使数组元素相等 给定一个长度为 n 的非空整数数组,找到让数组所有元素相等的最小移动次数.每次移动可以使 n - 1 个元素增加 1. 示例: 输入: [1,2,3] 输出: 3 ...

  6. 求去掉一条边使最小割变小 HAOI2017 新型城市化

    先求最小割,然后对残量网络跑Tarjan.对于所有满流的边,若其两端点不在同一个SCC中,则这条边是满足条件的. 证明见 来源:HAOI2017 新型城市化

  7. B. Connecting Universities DFS,无向树

    http://codeforces.com/problemset/problem/700/B 题意是,在一颗树中,有k个大学,要求两两匹配,他们之间的距离作为贡献,使得距离总和最大. 一开始的时候无从 ...

  8. 【wikioi】1904 最小路径覆盖问题(最大流+坑人的题+最小路径覆盖)

    http://wikioi.com/problem/1904/ 这题没看数据的话是一个大坑(我已报告官方修复了),答案只要求数量,不用打印路径...orz 最小路径覆盖=n-最大匹配,这个我在说二分图 ...

  9. HDU 3586.Information Disturbing 树形dp 叶子和根不联通的最小代价

    Information Disturbing Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 131072/65536 K (Java/ ...

随机推荐

  1. kafka及扩展的安装笔记

    参考文件 https://blog.csdn.net/weiwenjuan0923/article/details/76152744 一.首先确认下jdk有没有安装 安装参照这个连接 https:// ...

  2. Python知识点入门笔记——特色数据类型(元组)

    元组(tuple)是Python的另一种特色数据类型,元组和列表是相似的,可以存储不同类型的数据,但是元组是不可改变的,创建后就不能做任何修改操作. 创建元组 用逗号隔开的就是元组,但是为了美观和代码 ...

  3. 传送流(TS)的基础知识

    数字电视的TS包和TS流的组成和功能 综合考虑几下几个因素: (1)包的长度不能过短,否则包头开销所占比例过大, 导致传输效率下降 (2)包的长度不能过长,否则在丢失同步的情况下恢复同步的 周期过长, ...

  4. secureCRT中vim行号下划线问题

    在vim中发现开启显示行号(set number)或语法高亮(syntax on)时,发现文档中很多地方都有下划线,对视觉产生极大干扰.开始还以为是vim的某个配置造成的,后来发现真正的元凶是secu ...

  5. Hive UDAF开发详解

    说明 这篇文章是来自Hadoop Hive UDAF Tutorial - Extending Hive with Aggregation Functions:的不严格翻译,因为翻译的文章示例写得比较 ...

  6. 2 Model层 - 模型查询

    1.简介 查询集表示从数据库中获取的对象集合 查询集可以含有零个.一个或多个过滤器 过滤器基于所给的参数限制查询的结果 从Sql的角度,查询集和select语句等价,过滤器像where和limit子句 ...

  7. HttpRunnerManager 接口自动化测试平台 搭建实践

    一.需要准备的知识点 1. linux: 安装 python3.nginx 安装和配置.mysql 安装和配置 2. python: django 配置.uwsgi 配置 二.我搭建的环境 1. Ce ...

  8. SXCPC2018 nucoj1999 占领城市

    #include <iostream> #include <cstring> #include <cstdio> #include <queue> us ...

  9. Asp.net自定义控件开发任我行(1)-笑傲江湖

    1.引言 参加工作5个月了,来到一家小公司,有几只老鸟带我,但不是我公司的,几个礼拜才来一次.来到公司做的第一个项目是web项目,里面有很多的重复代码,页面代码都是千篇一律,你这人也太水了吧,垃圾代码 ...

  10. leetcode 【 Linked List Cycle II 】 python 实现

    公司和学校事情比较多,隔了好几天没刷题,今天继续刷起来. 题目: Given a linked list, return the node where the cycle begins. If the ...