点连通度 边连通度 最大流最小割 最小割点集 最小割边集 & 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万+

在 Windows 10 中通过 WSL2 安装 vLLM 部署本地大模型的方法和步骤

通过 WSL2 在 Windows 10 中部署 vLLM 的核心优势是兼顾 Windows 生态与 Linux 环境的 GPU 加速能力,适合需要在 Windows 下开发但依赖 vLLM 高性能推理的场景。相比原生 Windows 部署(Ollama 等工具),该方案性能更优(接近原生 Ubuntu),且支持更大模型和量化优化。若追求极致性能,建议直接使用 Ubuntu 系统;若必须依赖 Windows 工具链,WSL2 + vLLM 是当前最优选择。

当 AI 开始写文章、绘星空,甚至预测未来,您还在旁观吗?这里将剖开人工智能的思考逻辑,拆解 AI 创作的底层密码,也聊聊人工智能里的人文温度。每篇都有让你拍案的细节,快来解锁 AI 时代的神奇世界! 3753

西门子S7-1200/1500 PLC编程与应用技巧

西门子S7-1200 PLC是一款紧凑型的控制器,适用于小型到中型的自动化控制任务。紧凑设计:集成了I/O模块,减少了控制柜的空间需求。高性能:高达25µs的扫描时间,能够快速响应。模块化扩展:支持扩展输入输出模块、通信模块和智能模块,满足不同的应用需求。多种编程语言:支持Ladder图(梯形图)、功能块图(FBD)、结构化文本(ST)等多种编程语言。西门子S7-1200与S7-1500 PLC是强大且灵活的工业控制系统,适用于各种自动化应用。

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

uva1660 最大流

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

她山之石,决不自弃 1104

超酷炫,Python实现交通数据可视化!

此时输出的栅格化参数params的内容存储了栅格坐标系的原点坐标(slon、slat)、单个栅格的经纬度长宽 (deltalon、deltalat)、栅格的旋转角度(theta)、栅格的形状(method参数,其值可以是方形rect、三角形tri和六边形hexa)以及栅格的大小(gridsize参数,单位为米)。Python所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。今天分享一次Python交通数据分析与可视化的实战!

m0_59236127的博客 1697

【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

【开关电源篇】开关电源——只需这三个阶段,从电源小白到维修大神

🔌 该篇为的原创文章跳转目录,小二持续更新跳转链接,尽情关注!

2301_81299416的博客 2390

以GD32F103C8T6为例的核心板原理图PCB绘制学习笔记简单总结

重点在supplier part是立创商城的编号,可以搜到。

2301_80397661的博客 3261

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

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

weixin_30357231的博客 183

微电网系列: 位移因数DPF&&功率因数PF&&过激&&欠激

文中对比了位移因数(DPF,仅基波相位)与功率因数(PF,含谐波影响)的差异,指出PF=DPF×DF(畸变因数)。过激/欠激状态对应无功功率控制:过激(容性,电流超前,抬升电压)与欠激(感性,电流滞后,抑制电压)。PCS(如光伏逆变器)需逆向调节电网无功状态,过激时发出容性无功,欠激时吸收感性无功,以维持电压。

云纳星辰怀自在 1174

POJ 1966 Cable TV Network

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

P.H.S 454

机器视觉应用工程师职位深度解析与面试指南

广东奥普特科技招聘机器视觉应用工程师,要求大专以上理工科专业背景,熟悉C/C++或PLC编程,具备自动化设备调试经验。岗位职责包括视觉项目方案评估、系统安装调试、售后技术支持及异常处理,需接受外派出差。该职位面向专业对口的应届生或实习生,强调动手能力、沟通技巧和吃苦耐劳精神。机器视觉工程师需掌握图像处理算法、硬件配置等核心技术,在工业自动化领域具有良好发展前景。求职者应注重编程能力和实践经验的积累,以胜任这一技术密集型岗位。

郑伟强dev的专栏 431

GitHub 国内加速完全指南(最新):镜像、代理与优化技巧

在国内使用 GitHub 时,经常遇到 clone 慢、打开仓库卡、GitHub Actions 不稳定 等问题。下面是整理好的 GitHub 国内镜像和加速方法大全,高效使用 GitHub。

moton2017的博客 1万+

POJ1966 Cable TV Network 点连通度

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

Aszxqw 864

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

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

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

证明 :κ ≤ κ′ ≤ δ 图论

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

y15659037739l的博客 2263

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

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

点连通度的定义:一个具有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、付费专栏及课程。

余额充值