点连通度 边连通度 最大流最小割 最小割点集 最小割边集 & POJ 1966 Cable TV Network

poj 1966(求图(有向和无向图)的--边连通度和顶点连通度---转为最小割) 题目描述: 给你一个无向图,问你最少删掉几个点,使这个图成不连通。 解题报告: 概念 (1)一个具有 N 个顶点的图,在去掉任意 k-1 个顶点后 (1<=K<=N) 所得的子图仍连通,   而去掉 K 个顶点后的图不连通则称 G 是连通的, K 称作图 G 的点连通度,记作 K(G) 试设计 (2)相应地如果至少去掉 K 条边使这个图不连通,则 K 成为图的边连通度 边连 阅读详情

概念

(1)一个具有 N 个顶点的图,在去掉任意 k-1 个顶点后 (1<=K<=N) 所得的子图仍连通
,而去掉 K 个顶点后的图不连通则称 G 是连通的, K 称作图 G 的点连通度,记作 K(G) 试设计

(2)相应地如果至少去掉 K 条边使这个图不连通,则 K 成为图的边连通度

 

等价关系

(1)求边连通度给每条边赋权值 1 ,任意选择源点,枚举汇点,依次求最小割,取其中的最小值即可

(2)那么给定源点和汇点时怎么求最小割呢,那就用到了最大流最小割定理,即一个图的小割等于其源点与汇店间的最大流

(3) 如何求一个图的最小割边集呢:最大流最小割定理,首先求得最大流。然后残留网络中,从源点出发深度优先遍历,所有被遍历到的点构成点集 SET1 ,剩余的点构成点集 SET2 。则 edge<SET1,SET2> 即是最小割的割边集

(4)求一个给定的无向图的点连通度,可以转换为求边连通度,怎么转换就如下所示:

 

将点连通度转化为边连通度时怎么建图呢:
1
.构造一个网络 N
若 G 为无向图:
    (1)
原 G 图中的每个顶点 v 变成 N 网中的两个顶点 v' 和 v" ,顶点 v' 至 v" 有一条弧(有向边)连接,弧容量为 1;
    (2)
原 G 图中的每条边  e = uv ,在 N 网中有两条弧 e’= u"v',e"=v"u' 与之对应, e' 弧容量为 ∞ ,  e" 弧容量为 ∞
    (3)A”
为源顶点, B' 为汇顶点
    
注意:弧是有向边
若 G 为有向图:
    (I)
原 G 图中的每个顶点变成 N 网中的两个顶点 v’ 和 v” ,顶点 v' 至 v” 有一条弧连接,弧容量为 1
    (2)
原 G 图中的每条弧  e = uv 变成一条有向轨 u'u"v'v" ,其中轨上的弧 u"v' 的容量为 ∞;
    (3)A”
为源顶点, B' 为汇顶点
   
2
.指定一个源点 A" ,枚举汇点,求 A" 到 B' 的最大流 F
3
.求出所有枚举源点与汇点中的最小值 Fmin ,则所有具有流量 1 的弧 (v',v") 对应的 v 顶点组成一个割顶集,在 G 图中去掉这些顶点则 G 图变成不连通。
4
。求出的结果如果 Fmin >= n 则表示这个图是一个强连通图,不存在割点

 

下面举个求点连通度的例子 POJ 1966 Cable TV Network

#include <iostream>
#define MAX_N 105
#define MAX_VAL 99999999
#include <queue>
using namespace std;

char temp[20];
int n, m, minCutNum;

//保存边1-2*n不保存实际的边,而作为邻接表的入口
struct edge
{
    int to;
    int next;
}edges[MAX_N * MAX_N + MAX_N];
int edgen;

int graph[MAX_N][MAX_N];
int df[MAX_N][MAX_N], f[MAX_N][MAX_N];
int pre[MAX_N];
bool v[MAX_N];
queue<int> bfsq;

//插入边
void insertEdge(int from, int to)
{
    edgen++;
    edges[edgen].to = to;
    edges[edgen].next = edges[from].next;
    edges[from].next = edgen;
}

//bfs找增广路径
int bfs(const int &source, const int &dest)
{
    memset(v, 0, sizeof(v));
    memset(pre, 0, sizeof(pre));
    while(!bfsq.empty()) bfsq.pop();
    v[source] = true;
    bfsq.push(source);
    while(!bfsq.empty())
    {
        int curid = bfsq.front();
        bfsq.pop();
        if(curid == dest) break;

        int next = edges[curid].next, nextid;
        while(next != 0)
        {
            nextid = edges[next].to;
            if(!v[nextid] && df[curid][nextid] > 0)
            {
                v[nextid] = true;
                pre[nextid] = curid;
                bfsq.push(nextid);
            }
            next = edges[next].next;
        }
    }
    if(!pre[dest]) return -1;
    int preid, curid = dest, curminw = MAX_VAL;
    while((preid = pre[curid]) != 0)
    {
        if(df[preid][curid] < curminw) curminw = df[preid][curid];
        curid = preid;
    }
    return curminw;
}

//最大流算法
int admonsKarp(const int &source, const int &dest)
{
    int val;
    memcpy(df, graph, sizeof(graph));   
    memset(f, 0, sizeof(f));
    while((val = bfs(source, dest)) != -1)
    {
        //更新残留网络与权值网络
        int preid, curid = dest;
        while((preid = pre[curid]) != 0)
        {
            df[preid][curid] -= val;
            df[curid][preid] += val;
            f[preid][curid] += val;
            f[curid][preid] = -f[preid][curid];
            curid = preid;
        }
    }
    int next = edges[source].next, toid, total = 0;
    while(next != 0)
    {
        toid = edges[next].to;
        total += f[source][toid];
        next = edges[next].next;
    }
    return total;
}
int main()
{
    int i, p;
    while(scanf("%d%d", &n, &m) != EOF)
    {
        edgen = 2 * n;
        minCutNum = MAX_VAL;
        memset(edges, 0, sizeof(edges));
        memset(graph, 0, sizeof(graph));
        //建图,将点连通度转换为边连通度
        for(i = 1; i <= m; i++)
        {
            scanf("%s", temp);
            int val1 = 0, val2 = 0;
            p = 1;
            while(temp[p] != ',')
            {
                val1 = val1 * 10 + int(temp[p] - '0');
                p++;
            }
            p++;
            while(temp[p] != ')')
            {
                val2 = val2 * 10 + int(temp[p] - '0');
                p++;
            }
            val1++; val2++;
            graph[val1 + n][val2] = MAX_VAL;
            graph[val2 + n][val1] = MAX_VAL;
            insertEdge(val1 + n, val2);
            insertEdge(val2 + n, val1);
        }
        for(i = 1; i <= n; i++)
        {
            graph[i][i + n] = 1;// = graph[i + n][i] = 1;
            insertEdge(i, i + n);
            //insertEdge(i + n, i);
        }
        int curcutnum;
        for(i = 2; i <= n; i++)
        {
            curcutnum = admonsKarp(1 + n, i);
            if(curcutnum < minCutNum) minCutNum = curcutnum;
        }
        if(minCutNum >= n) printf("%d/n", n);
        else printf("%d/n", minCutNum);
    }
    return 0;
}

 

最小割问题-Karger‘s algorithm 上一篇文章我们提到了最小割问题,最小割问题在研究网络最薄弱环节相关问题上具备广泛应用。而这个问题如今也依旧是一个open problem。而今天我们就介绍一种求解最小割问题的概率型算法-Karger's algorithm。 该算法是karger读博期间发现的一种非常简单的算法。 其核心步骤就是我们随机在图上找两个点进行 constraction 合并操作。如下图所示: 注意2,3由于合并为了一个点,所以2 3两点之间的边我们就当做没有了,同时要消除由于合并形成的自环。 重复上述步骤到图只剩下两. 阅读详情

相关推荐

网络流求解图的连通度问题

图的连通度问题:在图中删去部分元素(点或边),使得图中指定的两个点s和t不连通(不存在从s到t的路径),求至少要删去几个元素。 图的连通度分为点连通度和边连通度: (1)点连通度:只许删点,求至少要删掉几个点(当然,s和t不能删去,这里保证原图中至少有三个点); (2)边连通度:只许删边,求至少要删掉几条边。 并且,有向图和无向图的连通度求法不同,因此还要分开考虑(对于混合图,只需将其中所

新博客地址:sensirly.github.io 1622

[连通度问题,最小割]

题意:给一个无向图,求其点连通度?(注意输入问题) 思路:   如果只有1个点,那么输出“1”;   如果有0条边,那么输出“0”;   其他情况:用最大流解决。下面讲如何建图:   图的连通度问题是指:在图中删去部分元素(点或边),使得图中指定的两个点s和t不连通(即不存在从s到t的路径),求至少要删去几个元素。   图的连通度分为点连通度和边连通度:     ...

weixin_34232363的博客 223

离散数学——无向图的连通度

补充:(点连通度<=边连通度<=图的最小度)1.设E’是边割集 , 则 p(G-E’)=p(G)+1(把这个边割集减掉以后,图的连通分支数+1)2.设E’是非完全图G的边割集,G-E’的2个连通分支是G1,G2,则存在u∈V(G1),v∈V(G2),使得(u,v)∉E(G)(把边割集去掉以后,把图分为两个连通分支,一定没有边能使他们两部分连起来)k-点连通图一定是k-边连通图!!!解释如下:推论(3条)

m0_74028782的博客 1723

图的匹配问题与最大流问题(四)——计算图的边连通度和点连通度

前三篇文章内容,(一)讲述了基础概念;(二)介绍了最大流算法的实现原理以及证明;(三)用Java语言予以了实现。这里,我们讲述如何利用最大流算法来求图的点连通度和边连通度,有图有代码,呵呵

smartxxyx的专栏 1万+

Lumerical FDTD新手必看:从零开始搭建光子晶体仿真环境(附完整脚本)

本文为Lumerical FDTD新手提供光子晶体仿真环境的完整搭建指南,涵盖从基础参数设置到脚本编写的全流程。通过典型光子晶体带隙分析案例,详细讲解结构建模、仿真参数配置及后处理技巧,并附赠完整MATLAB脚本,帮助用户快速掌握FDTD仿真核心技术。

3c4x5z6v7b的博客 1052

基于Matlab/Simulink的三相并网逆变器dq阻抗扫频仿真与理论建模实践指南

本文详细介绍了基于Matlab/Simulink的三相并网逆变器dq阻抗扫频仿真与理论建模实践方法。通过搭建仿真模型、设计扰动注入策略和FFT分析,精确提取阻抗特性,有效预测系统稳定性,为新能源并网系统设计提供可靠指导。

gold的博客 775

uva1660 最大流

点连通度和边连通度问题都可以转化为最小割最大流问题。用拆点法,相同点连接一条边,容量为1,不同点连2条边i+1→j,j+1→i,容量为INF。 注意scanf的用法,还可以这么用,以前不知道。 #include #include #include #include #include #include #include #include #include #include #include

她山之石,决不自弃 1104

Cursor+Playwright MCP实战:如何用自然语言一键生成UI自动化测试脚本

本文探讨了如何利用Cursor与Playwright MCP实现自然语言驱动的UI自动化测试脚本生成。通过智能IDE与浏览器自动化协议的结合,开发者可以高效创建稳定的测试脚本,显著提升测试效率与维护性。重点介绍了MCP架构的优势、项目结构最佳实践及团队协作规范,为自动化测试带来革命性改进。

k8l9m0n的博客 441

【poj1966】Cable TV Network 无向图点连通度(最大流)

DescriptionThe interconnection of the relays in a cable TV network is bi-directional. The network is connected if there is at least one interconnection path between each pair of relays present in the n

DQS的树洞 1322

COT Buck和普通Buck的区别

传统的电流模控制的调制原理,由时钟脉冲信号 clk 的上升沿触发开始一个新的开关周期,d 由低变高,主开关闭合,流过它的电流和电感电流相等,并以固定斜率逐渐增大,直至 iL *Ri 与斜坡补偿信号 se 的和等于控制信号 vc;此时,比较器的输出电平由低变高,导通时间产生器被触发,其输出 d 由低变高,并产生一个固定的导通时间 Ton;然后 PWM 比较器的输出由低变高,导通时间产生器被触发,主开关闭合,电感电流逐渐增大,直到导通时间产生器计满固定的时间 Ton,d 变为低电平,主开关断开,周期结束。

模拟芯片设计 1128

Google账号找回通用方法(尤其是知道账号密码仍无法登录和找回的)

Google账号找回通用方法【尤其是知道账号密码仍无法登录和找回的】普通找回注意:适用于常用谷歌账户的设备和网络情况下无法使用手机或辅助邮箱验证码进行密码找回特殊找回方法注意;适用于1.新的设备以及网络环境(包括由于非正常原因导致设备系统以及应用信息变更)2.没有开启辅助验证(手机/邮箱)3.知道账号密码但无法登录或找回。通过申诉进行找回 普通找回 注意:适用于 常用谷歌账户的设备和网络情况下 无法使用手机或辅助邮箱验证码进行密码找回 通过恢复页面进行恢复 https://accounts.google

极客代码-极致生活 23万+

POJ 1966 Cable TV Network (点连通度)【最小割】

&lt;题目链接&gt; 题目大意: 给定一个无向图,求点连通度,即最少去掉多少个点使得图不连通。 解题分析: 解决点连通度和边连通度的一类方法总结见 &gt;&gt;&gt; 本题是求点连通度,所以对每个点进行拆点,然后入点向出点连一条容量为1的边,其它边则是用一个容量为INF的边来代替。然后就是枚举一下源点和汇点,跑最大流,选最小的值即可。不过,本题需要注意一下是否为完全图,因为...

weixin_30357231的博客 183

OpenClaw 多机器人多 Agent 模式:打造你的 AI 助手团队

OpenClaw多Agent模式为企业提供高效的AI助手团队解决方案。通过创建4个独立的飞书机器人(主助理、内容创作、技术开发、AI资讯),每个连接专属Gateway和Agent模型(如Claude Opus/Sonnet、Gemini 2.5),实现专业分工。相比单Agent模式,多Gateway架构具有配置清晰、互不干扰、无需手动切换等优势。系统采用Profile隔离机制,各Agent拥有独立配置和端口。部署过程包括创建机器人应用、配置Agent、运行自动化脚本等步骤,支持私聊或群组@使用。日常提供状态

Maynor的博客 5099

POJ 1966 Cable TV Network

POJ 1966 Cable TV Network网络流,连通度问题 传送门:POJ 题意无向图,求点连通度,即最少去掉多少个点使得图不连通。注意一个点的图被视为连通,需要将那个点去掉。思路关于连通度问题:参见。其实图的连通度分为有向图无向图、点连通度边连通度,共四种。基础是有向图边连通度,就是将原图边容量定为1,随便找一源点,枚举汇点跑网络流。证明见参见。对于无向图,比如a与b有容量为10的边

P.H.S 454

第四节:Vben Admin登录对接后端getUserInfo接口

上一节,我们完成了/api/auth/login接口的创建,通过login接口,我们完成了登录和Token的生成。但是登陆还是报404返回,发现是Vben Admin又请求了一个/api/getUserInfo接口,本节我们就来分析完成这个接口本节,我们完成了getUserInfo接口,完成了登录操作,成功的进入到工作台页面。

cuiwin的专栏 2846

2023华为od机试C卷【最富裕的小家庭】C++ 实现

在一颗树中,每个节点代表一个家庭成员,节点的数字表示其个人的财富值,一个节点及其直接相连的子节点被定义为个小家庭。现给你一颗树,请计算出最富裕的小家庭的财富和。

MISAYAONE的博客 1239

POJ1966 Cable TV Network 点连通度

顾名思义。点连通度即使在一个图中,去掉多少个点可以使这个图不连通。 因为点连通度的求法是构图时转化为边连通度来求的。 而边连通度的求法: 构造一个流网络,每个无向边的容量为1。 任意取一个点作为源点。 枚举剩下的店作为汇点,求最小割。 枚举完取最小割最小的值就

Aszxqw 864

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

Poj 1966 Cable TV Network【点连通度------最大流Dinic】

Cable TV Network Time Limit: 1000MS   Memory Limit: 30000K Total Submissions: 4656   Accepted: 2149 Description The interconnection of the relays in a cable TV network

mengxiang000000 1221

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

证明 :κ ≤ κ′ ≤ δ 图论

κ:连通度,图G所具有的k顶点割中最小的k κ′ :边连通度,图G中所有k边割中最小的k δ :最小度 证:若G是平凡的,则

y15659037739l的博客 2263

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

图的点连通度边连通度总结

点连通度的定义:一个具有N个点的图G中,在去掉任意k-1个顶点后(1 独立轨:A,B是图G(有向无向均可)的两个顶点,我们称为从A到B的两两无公共内顶的轨为独立轨,其最大的条数记作p(A,B)。 在上图中有一个具有7个定点的连通图,从顶点1到顶点3有3条独立轨,即p(1,3)=3; 1—2—3 ,   1—7—3 , 1—6—5—4—3 如果分别从这3条独立轨中,每条轨抽出一个内点

Wall_F的专栏 3万+

图论证明:点连通度小于等于边连通度小于等于最小度

先来引入该证明涉及到的相关概念: 最小度:无向图G中度数最小顶点的度数,记作κ(G)\kappa(G)κ(G)。 边连通度:为使图G不连通或成为平凡图,至少需要从G中删除的边的数量称作G的点连通度,记作λ(G)\lambda(G)λ(G)。 点连通度:为使图G不连通或成为平凡图,至少需要从G中删除的顶点数量称作G的点连通度,记作λ(G)\lambda(G)λ(G)。 定理:对于任意一个图G: λ(G)≤δ(G)≤κ(G).\lambda(G)\leq\delta(G)\leq\kappa(G).λ(G)

m0_56745306的博客 2万+

点割集、边割集、点连通度、边连通度

点割集 设  且  不为空集,使得在无向图中去掉  中的点之后,图的连通分支增加,则称为无向图中的一个点割集 需要注意的是当删除 的任何一个真子集中的点之后,不会增加图的连通分支。当集合 中只含有一个元素时,该元素可称为图 的一个割点。 现给出以下例题方便大家理解。发现,当在图中删除点割集中的点之后,图会被分为两个或多个部分。集合{ ,  }为什么不是点割集???容易发现,该集合的真子集{...

墩儿还是菜鸡 5万+

图的割点、桥和双连通分支的基本概念

点连通度与边连通度 回到正题,首先介绍下什么是图的边连通度和点连通度。一般来说,点连通度是指对应一个图G,对于所有点集U属于V(G),也就是V(G)的子集中,使得G-U要么是一个非连通图,要么就是一个平凡图(即仅包含一个独立点的图),其中最小的集合U的大小就是图G的点连通度,有时候也直接称为图的连通度。通俗点说,就是一个图G最少要去掉多少个点会变成非连通图或者平凡图。当然对于一个完全图来说Kn来说...

日拱一卒,功不唐捐 4898

【转】图的点连通度边连通度总结

2010-08-24 00:44 来源 http://hi.baidu.com/lerroy312/blog/item/d7ea97ee7b1f3cddd439c927.html 点连通度的定义:一个具有N个点的图G中,在去掉任意k-1个顶点后(1&lt;=k&lt;=N),所得的子图仍然连通,去掉K个顶点后不连通,则称G是K连通图,K称作图G的连通度,记作K(...

a48634331的博客 1088

图论学习笔记——连通度

图的联通程度 (1)左图是最“脆弱的连通图”丢去任何一条边或任何一个非悬挂点都会是他称为非连通图。 (2)右图中虽然删去任何一条边后仍连通,但存在一个顶点 ,去掉后所得到的图非联通。 (3)左图中丢去任何一条边或一个顶点都不能使它称为给联通图,但去掉两个不相邻的顶点或边就成为非连通。 (4)右图连通性最强,任意去掉顶点和边后仍然是连通的。 点割集 设联通图不是完全图,是的...

计算机小白努力学习 9984

求点连通度,边连通度

图的连通度分为点连通度和边连通度:  (1)点连通度:只许删点,求至少要删掉几个点(当然,s和t不能删去,这里保证原图中至少有三个点);  (2)边连通度:只许删边,求至少要删掉几条边。  并且,有向图和无向图的连通度求法不同,因此还要分开考虑(对于混合图,只需将其中所有的无向边按照  无向图的办法处理、有向边按照有向图的办法处理即可)。 【1】有向图的边连通度:  这

代码中转站 1万+
上一篇: POJ 1986 Distance Queries
下一篇: POJ 1977 Odd Loving Bakers
bobten2008
博客等级 码龄18年 153粉丝 157原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值