洛谷P1345 无向图最小割点数

最小割和K割问题 最小割和k割多向切割(Multiwaycut)定义多向切割k-割基于贪心和独立割的近似算法独立割算法实例基于最小割树的近似算法最小割树算法实例 首先来介绍一下割的概念。 给定一个连通无向图G=(V,E),边的权重为w,定义一个割,割是一组边的集合,当图中去掉这组边之后,图就分为了两个互不连通的连通分支。割中的每一条割边,都分别连接着这两个连通分支。如果我们设定两个端点s,t,分别属于两个连通分支,那么,这个割就称为s-t割。我们可以用最大流算法去求这个s-t割的最小割边权重和。 多向切割(Multiwayc 阅读详情

题意:

给出一副有nnn个点,mmm条边的无向图,求出这副图的最小割点数

题意:

首先对于有向图,求他的最小割边,只需要令每条边的容量为111,求出起点到终点的最大流就是最小割边数了。

容量设为1的原因更多是反映这条路有没有流到达汇点,不需要在乎数量

对无向图,要求其最大流,只需要对双向边都建反向边即可,即

while(m--) {
	int u,v,w; 
    cin>>u>>v>>w;
    
	add(u,v,w);
	add(v,u,0);
	
	add(v,u,w);
	add(u,v,0);
}

此时要对无向图求最小割点数,考虑将点化成边,这样才符合最大流

考虑将一个点uuu拆分成入点u1u_{1}u1​和出点u2u_{2}u2​,此时同最小割边一样,将这个边权设为111,但在拆分源点汇点时,这两个点不可删去,所以内部权值要设为inf

#include<bits/stdc++.h>
using namespace std;

using ll=long long;
const int N=2e2+5,M=2e3+5,inf=0x3fffffff;
const long long INF=0x3fffffffffffffff,mod=998244353;

int ceil(int x,int y) {
	return x%y?x/y+1:x/y;
}

struct way {
	int to,next,cap;
	way()=default;
	way(int to,int next,int cap) {
		this->to=to;
		this->next=next;
		this->cap=cap;
	}
}edge[M<<2];
int cnt=1,head[N];

void add(int u,int v,int cap) {
	edge[++cnt]=way(v,head[u],cap);
	head[u]=cnt;
}

int n,m,s,t,dis[N],now[N];

bool bfs() {
	for(int i=1;i<=n;i++) dis[i]=inf;
	queue<int>q;
	q.push(s);
	dis[s]=0;
	now[s]=head[s];

	while(!q.empty()) {
		int u=q.front();
		q.pop();

		for(int i=head[u];i;i=edge[i].next) {
			auto [v,_,cap]=edge[i];
			if(dis[v]==inf&&cap) {
				dis[v]=dis[u]+1;
				q.push(v); now[v]=head[v];
				if(v==t) return true;
			}
		}
	}

	return false;
}

int dfs(int u,int flow) {
	if(u==t) return flow;
	int ret=0;
	for(int i=now[u];(now[u]=i);i=edge[i].next) {
		auto [v,_,cap]=edge[i];
		if(cap==0||dis[v]!=dis[u]+1) continue;
		int nflow=dfs(v,min(flow,cap));
		if(nflow==0) dis[v]=inf;
		else {
			edge[i].cap-=nflow;
			edge[i^1].cap+=nflow;
			ret+=nflow;
			flow-=nflow;
		}
	}
	return ret;
}

int main() {
    #ifdef stdjudge
        freopen("in.txt","r",stdin);
        auto TimeFlagFirst=clock();
	#endif

	std::ios::sync_with_stdio(false);
	std::cin.tie(nullptr);

	cin>>n>>m>>s>>t;
	for(int i=1;i<=n;i++) {
		int cap=(i==s||i==t)?inf:1;
		add(i,i+n,cap);
		add(i+n,i,0);
	}
	while(m--) {
		int u,v;
		cin>>u>>v;

		add(u+n,v,1);
		add(v,u+n,0);

		add(v+n,u,1);
		add(u,v+n,0);
	}

	t+=n;
	n<<=1;

	int ans=0;
	while(bfs()) ans+=dfs(s,inf);
	cout<<ans<<endl;

    #ifdef stdjudge
        freopen("CON","r",stdin);
        std::cout<<std::endl<<"耗时:"<<std::clock()-TimeFlagFirst<<"ms"<<std::endl;
        std::cout<<std::flush;
        system("pause");
    #endif
    return 0;
}

无向图的最小割问题 再不写博客我就要忘光了= =一个无向连通网络,去掉一个边集可以使其变成两个连通分量则这个边集就是割集。而最小割集是其中权值和最小的割集。网络流说起最小割,最为朴素的算法大约是从网络流入手,枚举汇点,比较所得到的最大流(最大流=最小割),其中最小的就是我们所求的答案。 但是显然这样算是非常非常慢的,进行了很多次重复而毫无意义的计算。即便可以求出正确答案,但效率低下等于没求,复杂度不小于O(n^4)。 阅读详情

相关推荐

无向图的最小割算法

                       求无向图的最小割 最小割集◎Stoer-Wagner算法一个无向连通网络,去掉一个边集可以使其变成两个连通分量则这个边集就是割集;最小割集当然就权和最小的割集。可以用最小切割最大流定理:1.min=MAXINT,确定一个源点2.枚举汇点3.计算最大流,并确定当前源汇的最小割集,若比min小更新min4.转到2直到枚举完毕5.min即为所求输出min

michael200892458的专栏 7938

无向图最小割

用Stoer-Wagner算法求无向图最小割。 定理:对于图中任意两点 s 和 t 来说,无向图 G 的最小割要么为 s 到 t 的割,要么是生成图 G / {s, t} 的割(意思是把 s 和 t 合并)。 那么算法的主步骤就是求出当前图中某两点的最小割,并将这两点合并。 快速求当前图某两点的最小割的方式: (1)维护一个集合A,初始里面只有v1这个点(可以任意); (2)取一个最大的w(A, y)的点 y 放进 A 集合(集合到点的权值为集合内所有点到该点的权值和); (3)反复2步骤,直到 A 集和

水蛙菌 1万+

uniapp+openlayers集成天地图实战:renderjs通信陷阱与性能优化避坑指南

本文深入探讨了uniapp与openlayers集成天地图时的renderjs通信陷阱与性能优化策略。通过实战案例解析了renderjs的特殊通信机制、地图实例生命周期管理、图层懒加载等关键技巧,帮助开发者避免常见坑点,提升应用流畅度。特别针对多语言切换、热重载偏移等疑难问题提供了解决方案,是uniapp+openlayers开发者的实用避坑指南。

weixin_30872157的博客 362

求无向图最小割

无向图最小割stoer-wagner算法的详细说明和AC模板

谁见过风 5585

Win11显卡驱动安装失败的全面解决方案

Windows 11显卡驱动安装失败是一个比较常见的问题,但通过上述方法,我们可以有效地解决这一问题。方法一通过调整组策略编辑器的驱动程序安装策略,可能解决一些因签名问题导致的安装失败;而方法二则通过重装Windows 11系统,为系统提供一个全新的、干净的环境,从而可能解决更复杂的安装问题。在实际操作中,用户可以根据具体情况选择合适的方法来解决显卡驱动安装失败的问题。

nntxthml的博客 2662

VUE3 实战手记(一)集成 EasyUI for Vue 组件库

本文详细介绍了如何在VUE3项目中集成EasyUI for Vue组件库,包括环境准备、基础安装、配置与集成、TypeScript类型问题解决以及组件实战等内容。EasyUI以其轻量级和开箱即用的特性,特别适合快速开发后台管理系统,提升开发效率。

weixin_30628801的博客 529

最小割树(Gomory-Hu Tree)求无向图最小割详解 附 BZOJ2229,BZOJ4519题解

最小割树(Gomory-Hu Tree) 前置知识 Gomory-Hu Tree是用来解决无向图最小割的问题的,所以我们需要了解无向图最小割的定义 和有向图类似,无向图上两点(x,y)的割定义为一个边集E,满足去掉该边集后x,y不联通。最小割即为所有的割中权值之和最小的割 通过这条割我们把点集划为两个部分,x所在的一个记为\(V_x\),y所在的一个记为\(V_y\) 定义 首先我们知道,一个n个...

weixin_30634661的博客 1195

国科大学习资料--自然语言处理(宗成庆)-2019期末考试题

国科大学习资料–自然语言处理(宗成庆)-2019期末考试题 国科大学习资料–自然语言处理(宗成庆)-2019期末考试题 国科大学习资料–自然语言处理(宗成庆)-2019期末考试题

无名何许人的博客 2437

无向图最小割Stoer-Wagner算法学习

无向连通网络,去掉一个边集可以使其变成两个连通分量则这个边集就是割集,最小割集当然就权和最小的割集。 使用最小切割最大流定理: 1.min=MAXINT,确定一个源点 2.枚举汇点 3.计算最大流,并确定当前源汇的最小割集,若比min小更新min 4.转到2直到枚举完毕 5.min即为所求输出min  复杂度很高:枚举汇点要O(n),最短增广路最大流算法求最大流是O((n^...

weixin_30702887的博客 319

计算机视觉:AI生成内容(AIGC)对视觉领域的冲击

计算机视觉:AI生成内容(AIGC)对视觉领域的冲击​ 人工智能,计算机视觉,大模型,AI,在信息技术日新月异的当下,计算机视觉作为人工智能领域的关键分支,已经深度融入了我们生活与工作的各个层面。从安防监控系统里精准的人脸识别,助力维护公共安全;到工业生产线上高效的产品质量检测,保障产品品质;再到医疗影像分析中为疾病诊断提供有力支持,计算机视觉技术凭借其对视觉信息的强大处理与理解能力,不断推动着各行业的发展与变革。

不踩坑,不知道坑有多深;不总结,踩过的坑白踩。 17万+

ABAP SQL Hierarchy 全景参考,组织树、分类树与递归查询在数据库层的优雅落地

ABAP SQL中的hierarchy语法为树形数据结构处理提供了高效方案。S/4HANA系统中常见的成本中心、利润中心、物料分类等树形结构,传统开发需通过递归和嵌套循环处理,而ABAP SQL hierarchies通过将层级遍历能力下沉到SQL层,借助SAP HANA的层级函数支持,实现了更高效的查询。 该功能要求ABAP 7.51+版本,支持两种实现方式:CDS hierarchy用于创建可复用的稳定层级模型,适合业务核心数据;ABAP SQL HIERARCHY generator则适用于临时性层级

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 313

洛谷P1345 [USACO5.4] 奶牛的电信 Telecowmunication

摘要:题目要求通过删除最少数量的电脑节点,使得给定的两个电脑节点$c1$和$c2$无法通信。采用网络流算法,通过将每个电脑节点拆分为输入和输出节点,并在它们之间建立边权为1的边($c1$和$c2$对应的边权为无穷大),将问题转化为求最小割。最终使用Dinic算法求解最大流,即得到需要删除的最小电脑数量。

AbelTomato的博客 1023

Thingsboard PE智慧运维仪表板实例(一)【智慧排口截污实例】

以该实际落地项目为案例,跟着我一起搭建智慧运维大屏!社区版和专业版都通用。本文是致力于快速搭建,所以不会详细去讲Thingsboard的知识点,只讲如何配置和使用部件。

weixin_67440240的博客 1720

洛谷 P1345. [USACO5.4]奶牛的电信Telecowmunication

链接 https://www.luogu.com.cn/problem/P1345 题意 nnn 个点,起点 sss ,终点 ttt ,sss 与 ttt 不直接相连,有 mmm 对点双向相连,求删掉多少点可以让 sss 与 ttt 不连通 思路 若求的是删多少边,直接跑最大流即可,考虑如何删点 将每个点 iii 拆成两个点 ui,viu_i,v_iui​,vi​,建立一条 uiu_iui​ 到viv_ivi​ 的有向边,边权为 111(s,ts,ts,t 边权设为正无穷,因为这两个点不能删) 对于 mmm

c4Lnn 的 优快云 博客 829

无需Python环境!纯C#上位机+OpenCVSharp4+ONNX Runtime实现YOLOv8摄像头实时流检测,工业级稳定

摘要 工业自动化C#开发中,传统Python方案实现视觉检测功能存在环境依赖、内存泄漏和性能不稳定等问题。本文提出基于.NET 8+OpenCVSharp4+ONNX Runtime的纯C#方案,通过实际案例验证其优势: 零Python依赖,支持离线部署 内存稳定(380MB/72h),检测延迟<80ms 检测精度达漏检率<0.1%,误检率<0.5% 保留原有业务逻辑代码,3天完成适配 方案采用分层架构设计,支持多种硬件平台和操作系统,提供从模型导出到部署的全流程指导,为工业视觉检测提供高

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 196

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

洛谷 P1345 奶牛的电信

题目描述:就是让你求无向图最小割点数解析:把每个点分成两个点,连一条距离为一的边,再把任意两个联通的点之间连上正无穷大的边,这样求出来最小割一定是割流量为一的边。特别注意的就是源点为出发点的出点,汇点为终点的入点,否则跑出来的值一定是一。程序#include&lt;iostream&gt; #include&lt;cstdio&gt; #include&lt;cstring&gt; #includ...

Slr2002的博客 377

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

洛谷P1345 [USACO5.4]奶牛的电信Telecowmunication(最小割点,最大流) 题解

题目来源:点击打开链接题目描述:题目描述你第一天接手三鹿牛奶公司就发生了一件倒霉的事情:公司不小心发送了一批有三聚氰胺的牛奶。很不幸,你发现这件事的时候,有三聚氰胺的牛奶已经进入了送货网。这个送货网很大,而且关系复杂。你知道这批牛奶要发给哪个零售商,但是要把这批牛奶送到他手中有许多种途径。送货网由一些仓库和运输卡车组成,每辆卡车都在各自固定的两个仓库之间单向运输牛奶。在追查这些有三聚氰胺的牛奶的时...

摇摇乐的博客 360

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

luogu1345[USACO5.4]奶牛的电信

最大流最小割

ACoder 685

【学习笔记】无向图最小割

总算是填好了这个弥天大坑……

七代目鸽影 1139

hdu3691Nubulsa Expo(Stoer-Wagner求无向图全局最小割)

题目请戳这里 题目大意:给一张图,n个点,m条无向边,每条边有权值,表示该路人流量上界。给定起点s,问如何选终点t,能是s-t的所有路径上最小人流量总和最大,给出这个最大流量。 题目分析:根据最大流最小割定理,此题就是求一个最小割。给定的起点是无用信息,因为起点一定在某个割集中,那么终点在另一个割集随便找一点即可。所以此题求的是一个全局最小割。最大流可以解决。但需要O(n)枚举终点。再加上最大

ophunter的专栏 2000

【HDU 3002】求解无向图的最小割-SW算法

1题目链接。题目大意:给定一个无向图,删除一些边使得图不再连通,求最下的代价。(代价定义为删除的边权和)。 2.首先我们需要判断图是不是联通的,判断无向图是否联通直接并查集即可。若是联通,那么就是求解一个无向图的最小割。如果采用固定原点枚举汇点跑网络流,复杂度达到O(N^5)。无向图的最小割叫做全局最小割,求解全局最小割有专门的SW算法。这道题也是一个模板题。 #include<bit...

YG爱木木 670

最小割算法

//最小割 Stoer-Wagner 算法 //Etrnls 2007-4-15 //Stoer-Wagner 算法用来求无向图 G=(V, E)的全局最小割。 //算法基于这样一个定理:对于任意s, t V ∈ ,全局最小割或者等于原图的s-t 最小割,或者等于将原图进行 Contract(s, //t)操作所得的图的全局最小割。 //算法框架: //1. 设当前找到的最小割MinCut

0.肆玖 1057

无向图全局最小割(模板)

题目大意:给出一个无向图,两点之间可能有多条边,求将图割成两部分的最小花费。 Stoer_Wagner算法目前还不太理解当作模板记录一下: #include<iostream> #include<cstdio> #include<cstring> using namespace std; const int MX = 505; const int inf...

1999 438

poj 2914 无向图最小割

最小割集◎Stoer-Wagner算法 一个无向连通网络,去掉一个边集可以使其变成两个连通分量则这个边集就是割集;最小割集当然就权和最小的割集。 可以用最小切割最大流定理: 1.min=MAXINT,确定一个源点 2.枚举汇点 3.计算最大流,并确定当前源汇的最小割集,若比min小更新min 4.转到2直到枚举完毕 5.min即为所求输出min 不难看出复杂度很高:枚举汇点要O

vsooda的专栏 4317

poj2914无向图的最小割模板

题意:给出无向图的点,边,权值。求最小割。 思路:根据题目规模,最大流算法会超时。 网上参考的模板代码。 代码: /*最小割集◎Stoer-Wagner算法:一个无向连通网络,去掉一个边集可以使其变成两个连通分量则这个边集就是割集;最小割集当然就权和最小的割集。 prim算法不仅仅可以求最小生成树,也可以求“最大生成树”。最小割集Stoer-Wagner算法就是典...

weixin_33869377的博客 180

无向图最小割/全局最小割

无向图的割: 无向图,去掉一个边集可以使图变成两个连通分量,则这个边集就是割集 无向图最小割: 边权和最小的割集。 Stoer-Wagner算法: 1.开始设最小割min=inf,任选一个起点P 2.类似prim从点p开始扩展出“最大生成树”,记录最后扩展的顶点和最后扩展的边 3.计算最后扩展到的顶点的切割值(即与此顶点相连的所有边权和),若比min小则更新min 4.合并最后扩展的那条边的两个端...

zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz 1206
上一篇: Codeforces 1798C lcm,gcd,思维
stdforces
博客等级 码龄4年 9粉丝 136原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值