BZOJ 2561 最小生成树(最大流)
题目链接:http://61.187.179.132/JudgeOnline/problem.php?id=2561
题意:给定一个边带正权的连通无向图G= (V,E),其中N=|V|,M=|E|,N个点从1到N依次编号,给定三个正整数u,v,和L (u≠v),假设现在加入一条边权为L的边(u,v),那么需要删掉最少多少条边,才能够使得这条边既可能出现在最小生成树上,也可能出现在最大生成树 上?
思路:考虑克鲁斯卡尔算法的过程。若加入的 边(u,v,L)能够出现在最小生成树中,那么权值小于L的边一定不能使得u和v连到一个连通分量中。因此问题等价于在权值小于L的边中选出最少的边使得 u和v不连通。那么我们将权值小于L的边建图,求最小割即可。最大生成树类似。
struct node { int v,cap,next; }; node edges[N<<2]; int head[N],e; void add(int u,int v,int cap) { edges[e].v=v; edges[e].cap=cap; edges[e].next=head[u]; head[u]=e++; } void Add(int u,int v,int cap) { add(u,v,cap); add(v,u,0); } int pre[N],cur[N],num[N],h[N]; int Maxflow(int s,int t,int n) { int i; for(i=0;i<=n;i++) cur[i]=head[i],num[i]=h[i]=0; int u=s,Min,k,v; int ans=0; while(h[u]<n) { if(u==t) { Min=INF+1; for(i=s;i!=t;i=edges[cur[i]].v) { k=cur[i]; if(edges[k].cap<Min) Min=edges[k].cap,v=i; } ans+=Min; u=v; for(i=s;i!=t;i=edges[cur[i]].v) { k=cur[i]; edges[k].cap-=Min; edges[k^1].cap+=Min; } } for(i=cur[u];i!=-1;i=edges[i].next) { if(edges[i].cap>0&&h[u]==h[edges[i].v]+1) break; } if(i!=-1) { cur[u]=i; pre[edges[i].v]=u; u=edges[i].v; } else { if(--num[h[u]]==0) break; k=n; cur[u]=head[u]; for(i=head[u];i!=-1;i=edges[i].next) { if(edges[i].cap>0&&h[edges[i].v]<k) { k=h[edges[i].v]; } } num[k+1]++; h[u]=k+1; if(u!=s) u=pre[u]; } } return ans; } int a[N],b[N],W[N]; int n,m; int main() { RD(n,m); int i; FOR1(i,m) RD(a[i],b[i],W[i]); int u,v,w; RD(u,v,w); FOR1(i,n) head[i]=-1; e=0; FOR1(i,m) if(W[i]<w) { if(b[i]!=u&&a[i]!=v) Add(a[i],b[i],1); if(a[i]!=u&&b[i]!=v) Add(b[i],a[i],1); } int ans=Maxflow(u,v,n+1); FOR1(i,n) head[i]=-1; e=0; FOR1(i,m) if(W[i]>w) { if(b[i]!=u&&a[i]!=v) Add(a[i],b[i],1); if(a[i]!=u&&b[i]!=v) Add(b[i],a[i],1); } ans+=Maxflow(u,v,n+1); PR(ans); }
BZOJ 2561 最小生成树(最大流)的更多相关文章
- BZOJ 2561: 最小生成树(最小割)
U,V能在最小(大)生成树上,当且仅当权值比它小(大)的边无法连通U,V. 两次最小割就OK了. --------------------------------------------------- ...
- BZOJ 2561 最小生成树 | 网络流 最小割
链接 BZOJ 2561 题解 用Kruskal算法的思路来考虑,边(u, v, L)可能出现在最小生成树上,就是说对于所有边权小于L的边,u和v不能连通,即求最小割: 对于最大生成树的情况也一样.容 ...
- BZOJ 2561: 最小生成树【最小割/最大流】
Description 给定一个边带正权的连通无向图G=(V,E),其中N=|V|,M=|E|,N个点从1到N依次编号,给定三个正整数u,v,和L (u≠v),假设现在加入一条边权为L的边(u,v), ...
- bzoj 2561: 最小生成树
#include<cstdio> #include<iostream> #include<cstring> #define M 100009 #define inf ...
- bzoj 2561: 最小生成树【最小割】
看错题了以为多组询问吓得不行-- 其实还挺好想的,就是数据范围一点都不网络流.把U作为s,V作为t,以最小生成树为例,(U,V,L)要在最小生成树上,就要求所有边权比L小的边不能连通(U,V)所在的联 ...
- 【BZOJ】2561: 最小生成树【网络流】【最小割】
2561: 最小生成树 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 2685 Solved: 1253[Submit][Status][Discu ...
- BZOJ 3158 千钧一发 (最大流->二分图带权最大独立集)
题面:BZOJ传送门 和方格取数问题很像啊 但这道题不能像网格那样黑白染色构造二分图,所以考虑拆点建出二分图 我们容易找出数之间的互斥关系,在不能同时选的两个点之间连一条流量为$inf$的边 由于我们 ...
- matlab学习——04图与网络(最短路,最小生成树,最大流)
04图与网络 1.最短路 (1) 自己写的dijstra算法 format compact; clc,clear all a=zeros(6); a(1,2)=50;a(1,4)=40;a(1,5)= ...
- bzoj 1189 二分+最大流判定
首先我们可以二分一个答案时间T,这样就将最优性问题 转化为了判定性问题.下面我们考虑对于已知的T的判定 对于矩阵中所有的空点bfs一次,得出来每个点到门的距离, 然后连接空点和每个能在t时间内到达的门 ...
随机推荐
- Mysql触发器总结
触发器(trigger):监视某种情况,并触发某种操作. 触发器创建语法四要素:1.监视地点(table) 2.监视事件(insert/update/delete) 3.触发时间(after/befo ...
- LDA-math-LDA 文本建模
http://cos.name/2013/03/lda-math-lda-text-modeling/ 5. LDA 文本建模 5.1 游戏规则 对于上述的 PLSA 模型,贝叶斯学派显然是有意见的, ...
- PAT乙级 1006. 换个格式输出整数 (15)
1006. 换个格式输出整数 (15) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 CHEN, Yue 让我们用字母B来表示“百” ...
- 使用php模拟post的几种方法
<?phpfunction file_get_contents_post($url,$post){$options=array('http'=>array('method'=>'PO ...
- zw版_Halcon图像库delphi接口文件
zw版_Halcon图像库delphi接口文件 Halcon图像库delphi接口文件,根据安装时用户设置的文件目录不同,会有所差异,笔者一般安装在delphi的import目录下. 参见:& ...
- 给图像添加logo
#include <opencv2\opencv.hpp>#include"ProcessPixels.h"using namespace cv;using names ...
- 忘记windows的登陆密码
http://user.qzone.qq.com/372806800/blog/1342261571
- Android 常用工具类之SPUtil,可以修改默认sp文件的路径
参考: 1. 利用Java反射机制改变SharedPreferences存储路径 Singleton1900 2. Android快速开发系列 10个常用工具类 Hongyang import ...
- BlueDroid介绍 【转】
转自:http://blog.csdn.net/fen_liu/article/details/41213167 [-] 基本结构 代码区 http://www.cnblogs.com/hzl6255 ...
- HDU 3078:Network(LCA之tarjan)
http://acm.hdu.edu.cn/showproblem.php?pid=3078 题意:给出n个点n-1条边m个询问,每个点有个权值,询问中有k,u,v,当k = 0的情况是将u的权值修改 ...