HDU 3452 Bonsai(网络流之最小割)
题目地址:HDU 3452
最小割水题。
源点为根节点。再另设一汇点,汇点与叶子连边。
对叶子结点的推断是看度数是否为1.
代码例如以下:
- #include <iostream>
- #include <cstdio>
- #include <string>
- #include <cstring>
- #include <stdlib.h>
- #include <math.h>
- #include <ctype.h>
- #include <queue>
- #include <map>
- #include <set>
- #include <algorithm>
- using namespace std;
- const int INF=0x3f3f3f3f;
- int head[3000], source, sink, nv, cnt, deg[2000];
- int cur[3000], num[3000], d[3000], pre[3000];
- struct node
- {
- int u, v, cap, next;
- } edge[1000000];
- void add(int u, int v, int cap)
- {
- edge[cnt].v=v;
- edge[cnt].cap=cap;
- edge[cnt].next=head[u];
- head[u]=cnt++;
- edge[cnt].v=u;
- edge[cnt].cap=0;
- edge[cnt].next=head[v];
- head[v]=cnt++;
- }
- void bfs()
- {
- memset(num,0,sizeof(num));
- memset(d,-1,sizeof(d));
- queue<int>q;
- q.push(sink);
- d[sink]=0;
- num[0]=1;
- while(!q.empty())
- {
- int u=q.front();
- q.pop();
- for(int i=head[u]; i!=-1; i=edge[i].next)
- {
- int v=edge[i].v;
- if(d[v]==-1)
- {
- d[v]=d[u]+1;
- num[d[v]]++;
- q.push(v);
- }
- }
- }
- }
- int isap()
- {
- memcpy(cur,head,sizeof(cur));
- int flow=0, u=pre[source]=source, i;
- bfs();
- while(d[source]<nv)
- {
- if(u==sink)
- {
- int f=INF, pos;
- for(i=source; i!=sink; i=edge[cur[i]].v)
- {
- if(f>edge[cur[i]].cap)
- {
- f=edge[cur[i]].cap;
- pos=i;
- }
- }
- for(i=source; i!=sink; i=edge[cur[i]].v)
- {
- edge[cur[i]].cap-=f;
- edge[cur[i]^1].cap+=f;
- }
- flow+=f;
- u=pos;
- }
- for(i=cur[u]; i!=-1; i=edge[i].next)
- {
- if(d[edge[i].v]+1==d[u]&&edge[i].cap)
- break;
- }
- if(i!=-1)
- {
- cur[u]=i;
- pre[edge[i].v]=u;
- u=edge[i].v;
- }
- else
- {
- if(--num[d[u]]==0) break;
- int mind=nv;
- for(i=head[u]; i!=-1; i=edge[i].next)
- {
- if(mind>d[edge[i].v]&&edge[i].cap)
- {
- mind=d[edge[i].v];
- cur[u]=i;
- }
- }
- d[u]=mind+1;
- num[d[u]]++;
- u=pre[u];
- }
- }
- return flow;
- }
- int main()
- {
- int n, i, u, v, w;
- while(scanf("%d%d",&n,&source)!=EOF&&n&&source)
- {
- memset(head,-1,sizeof(head));
- memset(deg,0,sizeof(deg));
- cnt=0;
- sink=n+1;
- nv=sink+1;
- for(i=1;i<n;i++)
- {
- scanf("%d%d%d",&u,&v,&w);
- add(u,v,w);
- add(v,u,w);
- deg[u]++;
- deg[v]++;
- }
- for(i=1;i<=n;i++)
- {
- if(i!=source&°[i]==1)
- {
- add(i,sink,INF);
- }
- }
- printf("%d\n",isap());
- }
- return 0;
- }
HDU 3452 Bonsai(网络流之最小割)的更多相关文章
- 【BZOJ2229】[ZJOI2011]最小割(网络流,最小割树)
[BZOJ2229][ZJOI2011]最小割(网络流,最小割树) 题面 BZOJ 洛谷 题解 戳这里 那么实现过程就是任选两点跑最小割更新答案,然后把点集划分为和\(S\)联通以及与\(T\)联通. ...
- 【CF331E】Biologist(网络流,最小割)
[CF331E]Biologist(网络流,最小割) 题面 洛谷 翻译: 有一个长度为\(n\)的\(01\)串,将第\(i\)个位置变为另外一个数字的代价是\(v_i\). 有\(m\)个要求 每个 ...
- 【BZOJ1391】Order(网络流,最小割)
[BZOJ1391]Order(网络流,最小割) 题面 BZOJ权限题... 良心洛谷 题目描述 有N个工作,M种机器,每种机器你可以租或者买过来. 每个工作包括若干道工序,每道工序需要某种机器来完成 ...
- 【BZOJ3144】切糕(网络流,最小割)
[BZOJ3144]切糕(网络流,最小割) 题面 BZOJ 题解 这样的类型很有趣 先不考虑相邻距离差不能超过\(D\)的限制 我们考虑答案,显然就是在每个位置选一个最小的高度割就行了 化成最小割的模 ...
- 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 ...
- 【HDU 5855】Less Time, More profit(网络流、最小割、最大权闭合子图)
Less Time, More profit Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/O ...
- HDU 4859(Bestcoder #1 1003)海岸线(网络流之最小割)
题目地址:HDU4859 做了做杭电多校,知识点会的太少了.还是将重点放在刷专题补知识点上吧,明年的多校才是重点. 这题题目求的最长周长.能够试想一下,这里的海岸线一定是在"."和 ...
- HDU 4289:Control(最小割)
http://acm.hdu.edu.cn/showproblem.php?pid=4289 题意:有n个城市,m条无向边,小偷要从s点开始逃到d点,在每个城市安放监控的花费是sa[i],问最小花费可 ...
- [bzoj1497][NOI2006]最大获利_网络流_最小割
最大获利 bzoj-1497 题目大意:可以建立一个点,花费一定的代价:将已经建立的两个点之间连边,得到一定收益.有些节点之间是不允许连边的. 注释:1<=点数<=5,000,1<= ...
随机推荐
- 【HDOJ】4412 Sky Soldiers
1. 题目描述有$k$个伞兵跳伞,有$m$个汇点.当伞兵着陆后,需要走向离他最近的汇点.如何选择这$m$个结点,可以使得士兵最终行走的距离的期望最小.求这个最小的期望. 2. 基本思路假设已经选好了这 ...
- Git版本控制使用介绍
Git是什么? Git是一款免费.开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目. Git与SVN的最主要的区别? Git是分布式的,SVN不是 Git没有一个全局的版本号,而SVN有 ...
- poj1026Cipher(置换群)
链接 找循环节 然后所有子循环节的最小公倍数就是总的循环节 找结果的时候也按一个个置换来进行转换 不然也TLE #include <iostream> #include<cstdio ...
- php 生成类的对象 $a=new test();
程序 <?php class test { ... } $a=new test(); 1.BNF 范式 start: variable '=' expr ';' expr: new_expr ; ...
- 如何在Azure Websites中配置PHP从而改变系统默认时区
Shirley_Wang Tue, Mar 3 2015 7:29 AM Azure Website为我们提供了可高度扩展的网站部署平台.由于Website是PaaS(平台即服务)层的服务,当用户把 ...
- apache开源项目--Camel
Apache Camel 是一个非常强大的基于规则的路由以及媒介引擎,该引擎提供了一个基于POJO的 企业应用模式(Enterprise Integration Patterns)的实现,你可以采用其 ...
- Windows 下目录及文件向Linux同步
本文解决的是Windows 下目录及文件向Linux同步的问题,Windows向 Windows同步的请参考:http://www.idcfree.com/article-852-1.html 环境介 ...
- (七)学习CSS之filter属性
filter: alpha(opacity=,finishopacity=,style=)??? alpha是来设置透明度的,它的基本属性是filter:alpha(opacity,finishopa ...
- Button 自定义(一)-shape
需求:自定义Button,使用系统自定义Shape: 效果图: 1.默认状态 2.选中状态 实现分析: 1.目录结构: 代码实现: 1.button_normal.xml <?xml versi ...
- CVTE公司面经
1.先是网上测评,通过后通知你参加一面. 2.关于一面:一共进行了10分钟左右,三四个人一起面,没有问什么技术. 一共问了3个问题:a.你为什么选择我们公司的这个职位.我答的大概意思是本科研究生期间, ...