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

深入剖析STM32F103 I2C总线死锁问题及高效应对策略

本文深入剖析了STM32F103硬件I2C总线在轮询模式下发生死锁的根本原因,即硬件状态机的预取机制与软件响应速度不匹配。文章提供了高效的解决方案,包括在轮询模式下提前发送NACK/STOP信号、降低总线速度,以及治本的中断与DMA应用策略,帮助开发者根据项目需求选择最合适的方案,彻底解决这一经典硬件缺陷问题。

weixin_29184371的博客 206

【STABLE_BASELINE3】强化学习算法实战:模型的保存,读取,再训练

STABLE-BASELINE3,模型读取,再训练:有时候需要在已经训练好的模型基础上进行再次训练。

Kiek17的博客 4867

uva1660 最大流

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

她山之石,决不自弃 1104

UniApp 与 Taro 深度解析:如何根据项目需求选择最佳跨平台框架?

本文深度对比了UniApp和Taro两大主流跨平台开发框架。UniApp基于Vue生态,提供开箱即用的高效开发体验,尤其适合快速覆盖多端小程序;Taro则根植React范式,架构灵活,便于与现有React生态集成,更适合对性能和原生体验有高要求的复杂项目。文章结合团队技术栈、项目类型及性能需求,为开发者提供了清晰的选型指南。

snow3的博客 204

【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

Google Earth Engine :处理Sentinel-1 GRD SAR数据以估算田间尺度土壤湿度的工作流程(计算双极化雷达植被指数(DpRVIc)和VV极化后向散射强度(VVdB))

本文介绍了利用Google Earth Engine (GEE)处理Sentinel-1 SAR数据估算田间土壤湿度的方法。工作流程包括:定义研究区域并筛选指定日期、轨道参数的Sentinel-1图像;预处理计算双极化雷达植被指数(DpRVIc)和VV极化后向散射强度(VVdB),通过均值滤波降噪并去除无效像素;结合动态世界数据集掩膜水体/城市区域;最终导出时序GeoTIFF文件。DpRVIc基于双极化后向散射系数比,对植被结构敏感,而VVdB反映地表反射特性,二者结合可有效评估土壤湿度。该方法适用于农业监

此星光明博客 383

网络攻防——kali操作系统基本使用

主要介绍如何搭建kali虚拟机,然后介绍了一个简单的攻击方法,切记,网络恶意攻击属于违法行为

weixin_46560512的博客 2万+

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

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

weixin_30357231的博客 183

Python经典编程习题100例:第32例:相反顺序输出列表

不要自卑,去提升实力 互联网行业谁技术牛谁是爹 如果文章可以带给你能量,那是最好的事!请相信自己 加油o~ 本人初学Python,只为熟悉语法编写,大神请勿理会 点击下面链接 Python经典编程100例习题汇总 题目描述: 按相反的顺序输出列表的值。 解题思路: &gt; 利用reverse函数逆序 代码: arr=['f','g','e','b'] print(arr) arr.reverse() print(arr) ...

优快云 精品推荐 1416

POJ 1966 Cable TV Network

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

P.H.S 454

Android Camera驱动开发工程师面试指南:技术深度与实战准备

摘要:上海移远通信招聘Android Camera驱动开发工程师,主要负责Camera传感器驱动开发维护、高通/展锐平台底层开发及技术预研。岗位要求1年以上嵌入式开发经验,精通Camera传感器驱动调试,熟悉高通平台Camera架构及Android HAL框架。具备HAL开发、算法集成或车载/支付行业经验者优先。工作内容以Driver/HAL开发为主,需具备硬件接口评估能力。该职位接受Linux/单片机背景人员转型。

郑伟强dev的专栏 280

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

POJ1966 Cable TV Network 点连通度

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

Aszxqw 864

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

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

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

证明 :κ ≤ κ′ ≤ δ 图论

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

y15659037739l的博客 2263

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

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

余额充值