[bzoj2561]最小生成树_网络流_最小割_最小生成树
最小生成树 bzoj-2561
题目大意;题目链接。
注释:略。
想法:
我们发现:
如果一条权值为$L$的边想加入到最小生成树上的话,需要满足一下条件。
就是求出原图的最小生成树之后,这个边当做非树边的情况下覆盖的边的最小值不可以比$L$小。
如此,我们级就可以通过网络流来求了。
对于每一条比$L$小的边,我们连双向边,求当前边$u,v$的最小割即可。
如果是最大生成树的话同理,我们只需要把所有比当前加入的边的权值小的边在网络流中连无向边,然后跑最小割即可。
Code:
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <queue>
#define N 200100
#define M 2000100
using namespace std;
int to[M<<1],head[N],nxt[M<<1],val[M<<1],dis[N],tot=1,S,T;
queue<int>q;
struct Node {int x,y,w;}e[M]; inline bool cmp_w(const Node &a,const Node &b) {return a.w<b.w;}
char *p1,*p2,buf[100000];
#define nc() (p1==p2&&(p2=(p1=buf)+fread(buf,1,100000,stdin),p1==p2)?EOF:*p1++)
int rd() {int x=0,f=1; char c=nc(); while(c<48) {if(c=='-') f=-1; c=nc();} while(c>47) x=(((x<<2)+x)<<1)+(c^48),c=nc(); return x*f;}
inline void add(int x,int y,int z)
{
to[++tot]=y; val[tot]=z; nxt[tot]=head[x]; head[x]=tot;
to[++tot]=x; val[tot]=0; nxt[tot]=head[y]; head[y]=tot;
}
bool bfs()
{
memset(dis,-1,sizeof dis); while(!q.empty()) q.pop();
dis[S]=0; q.push(S); while(!q.empty())
{
int x=q.front(); q.pop(); for(int i=head[x];i;i=nxt[i]) if(dis[to[i]]==-1&&val[i]>0)
{
dis[to[i]]=dis[x]+1; q.push(to[i]);
if(to[i]==T) return true;
}
}
return false;
}
int dinic(int x,int fl)
{
int tmp=fl; if(x==T) return fl; for(int i=head[x];i;i=nxt[i]) if(dis[to[i]]==dis[x]+1&&val[i]>0)
{
int mdl=dinic(to[i],min(val[i],tmp));
if(!mdl) dis[to[i]]=-1;
val[i]-=mdl; tmp-=mdl; val[i^1]+=mdl;
if(!tmp) break;
}
return fl-tmp;
}
int main()
{
int n=rd(),m=rd(); for(int i=1;i<=m;i++) e[i].x=rd(),e[i].y=rd(),e[i].w=rd();
int u=rd(),v=rd(),L=rd(); S=u,T=v;
int ans=0;
for(int i=1;i<=m;i++) if(e[i].w<L) add(e[i].x,e[i].y,1),add(e[i].y,e[i].x,1);
while(bfs()) ans+=dinic(u,1<30);
memset(head,0,sizeof head); tot=1;
for(int i=1;i<=m;i++) if(e[i].w>L) add(e[i].x,e[i].y,1),add(e[i].y,e[i].x,1);
while(bfs()) ans+=dinic(u,1<<30);
cout << ans << endl ;
return 0;
}
小结:好玩吧。
[bzoj2561]最小生成树_网络流_最小割_最小生成树的更多相关文章
- BZOJ_1797_[Ahoi2009]Mincut 最小割_最小割+tarjan
BZOJ_1797_[Ahoi2009]Mincut 最小割_最小割+tarjan Description A,B两个国家正在交战,其中A国的物资运输网中有N个中转站,M条单向道路.设其中第i (1≤ ...
- 【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\)的限制 我们考虑答案,显然就是在每个位置选一个最小的高度割就行了 化成最小割的模 ...
- [bzoj4519][Cqoi2016]不同的最小割_网络流_最小割_最小割树
不同的最小割 bzoj-4519 Cqoi-2016 题目大意:题目链接. 注释:略. 想法: 我们发现这和最小割那题比较像. 我们依然通过那个题说的办法一样,构建最小割树即可. 接下来就是随便怎么处 ...
- [bzoj2229][Zjoi2011]最小割_网络流_最小割树
最小割 bzoj-2229 Zjoi-2011 题目大意:题目链接. 注释:略. 想法: 在这里给出最小割树的定义. 最小割树啊,就是这样一棵树.一个图的最小割树满足这棵树上任意两点之间的最小值就是原 ...
- BZOJ_1001_狼抓兔子_(平面图求最小割+对偶图求最短路)
描述 http://www.lydsy.com/JudgeOnline/problem.php?id=1001 1001: [BeiJing2006]狼抓兔子 Time Limit: 15 Sec ...
- [TJOI2013]攻击装置(网络流,最小割)
前言 网络流被hbx吊起来打 Solution 考虑一下这个走法是不是和象棋中马的走法一模一样(废话) 那么显然我每一次移动是走三次,如果将棋盘二分图染色一下,不就是每一次只能走到另一个颜色的吗? 然 ...
随机推荐
- applicationContext.getBean(“loginEntity”)
<!-- 指定Spring需要扫描的包,并将所有是别的类放到容器中,便于识别被注解的受托管bean --> <context:component-scan base-package= ...
- 掌握Spark机器学习库(课程目录)
第1章 初识机器学习 在本章中将带领大家概要了解什么是机器学习.机器学习在当前有哪些典型应用.机器学习的核心思想.常用的框架有哪些,该如何进行选型等相关问题. 1-1 导学 1-2 机器学习概述 1- ...
- 内存管理总结-autoreleasePool
转自其他 序言 无论是在MRC时期还是ARC时期,做过开发的程序员都接触过autoreleasepool.尽管接触过但本人对它还不是很了解.本文只是将自己的理解说出来.在内存管理的文章中提到了OC的内 ...
- COMMENT - 定义或者改变一个对象的评注
SYNOPSIS COMMENT ON { TABLE object_name | COLUMN table_name.column_name | AGGREGATE agg_name (agg_ty ...
- css滚动条样式修改
.activeMoreBankList{ height: 188px; overflow-y: auto;} /*滚动条样式*/.activeMoreBankList::-webkit-scrollb ...
- OAuth - 第三方登录的原理
第三方登录的原理 所谓第三方登录,实质就是 OAuth 授权.用户想要登录 A 网站,A 网站让用户提供第三方网站的数据,证明自己的身份.获取第三方网站的身份数据,就需要 OAuth 授权. 举例来说 ...
- No-8.循环
01. 程序的三大流程 在程序开发中,一共有三种流程方式: 顺序 —— 从上向下,顺序执行代码 分支 —— 根据条件判断,决定执行代码的 分支 循环 —— 让 特定代码 重复 执行 02. while ...
- 第1节 yarn:15、关于yarn中常用的参数设置
第一个参数:container分配最小内存 yarn.scheduler.minimum-allocation-mb 1024 给应用程序container分配的最小内存 第二个参数:co ...
- <Redis> 入门X 分布式锁
分布式其实就是多进程的程序,当多个进程访问一个资源,会造成问题: 1.资源共享的竞争问题 2.数据的安全性 分布式锁的解决方案: 1.怎么去获取锁 数据库 zookeeper redis 2.怎么释放 ...
- 【转】Delphi 文件拖放
转自:万一的博客. 原理分析: 这需要用到 ShellAPI 单元的两个函数: DragAcceptFiles.DragQueryFile; 用 DragAcceptFiles(窗口句柄, True) ...