题意:求点联通度

首先看了别人的题解还是不晓得只枚举汇点的原因觉得行不通

关于求点联通度的建图方法 转自http://hi.baidu.com/lerroy312/item/5a5f36f2f5bba61bcf9f322e

点连通度的定义:一个具有N个点的图G中,在去掉任意k-1个顶点后(1<=k<=N),所得的子图仍然连通,去掉K个顶点后不连通,则称G是K连通图,K称作图G的连通度,记作K(G)。

独立轨: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条独立轨中,每条轨抽出一个内点,在G图中删掉,则图不连通。若连通图G的两两不相邻顶点间的最大独立轨数最小的P(A,B)值即为K(G)。若G为完全图(两两点可达),则

K(G)=n-1,即完全把某个点的所有边删掉后才不连通。既然独立轨是只能经过一次的边,那么可以构造网络流模型,其中每条边的容量为1,就可以限制只经过一次。

构建网络流模型:

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为有向图

(1)原G图中的每个顶点V变成N网中的两个顶点V`和V``,顶点V`至V``有一条容量为1的弧;

(2)原G图中的每条弧e=UV变成一条有向轨U`U``V`V``,其中轨上的弧U``V`的容量为无穷;

(3)以A``为源点,B`为汇点求最大流。

上面的模型只是求出了以A为源点B为汇点的最大流max_flow,等价于在G中只要去掉max_flow个点就会使得A与B不连通。而图的连通度是要求去掉最少的点使得整个图不连通,做法是固定一个点为源点,枚举与源点不相邻的点为汇点,求最大流。在所有的枚举结果中最小的max_flow值就是要求的K(G).注意如果某次枚举的汇点求出 的最大流为无穷则说明此此枚举的源点与汇点是强连通的。如果所有的枚举结果都为无穷,则说明整个图G是强连通的,需要去掉n-1个点才能破坏其连通性。

所有具有流量为1的弧(V`,V``)对应的V顶点组成一个割顶集

通过求连通度可以得到一个结论:G是K的连通图,k>=2,则任意K个顶点共圈。

求边连通度总结:

同样引入独立轨的概念,只是在这里叫弱独立轨,同样在每条弱独立轨中只有去掉某一条边就可以使起点到终点不连通,现在整个图G的边连通度就是要找出任意两点的弱独立轨的最小值。如果图G为完全图,则K`(G)为n-1。

构建一个网络N

G为无向图:

1.     原G图中的每条边e=UV变成两条边e`=UV,e``=VU,容量都为1;

2.     固定一个点为源点,枚举与源点不相邻的为汇点,求最大流max_flow,保留最小的max_flow即为图的边连通度。

G为有向图:

1.     原G图中每条有向边容量为1;

2.     此步骤与无向图的步骤2相同。

求出的残余网络中,流量为1的弧e`=(u,v),则e`就是桥。

从图的边连通度中可以得到以下结论:

1.          A是有向图G的一个顶点,如果A与G的其他所有点V间的最小值为K,则G中存在以A为根的K棵无公共边的生成树;

2.          设G是有向图,0<k<=K`(G),L是0至k之间任意一个整数,对于图G的任意一对顶点(u,v)来说,存在U到V的L条弱独立有向轨,同时存在从V到U的L-k条弱独立有向轨。

#include <map>
#include <set>
#include <list>
#include <cmath>
#include <ctime>
#include <deque>
#include <stack>
#include <queue>
#include <cctype>
#include <cstdio>
#include <string>
#include <vector>
#include <climits>
#include <cstdlib>
#include <cstring>
#include <iostream>
#include <algorithm>
#define LL long long
#define PI 3.1415926535897932626
using namespace std;
int gcd(int a, int b) {return a % b == ? b : gcd(b, a % b);}
#define MAXN 110
const int INF = 0x3f3f3f3f;
int p[MAXN];
int cap[MAXN][MAXN],flow[MAXN][MAXN];
int a[MAXN];
int N,M;
int Edmonds_karp(int s, int t)
{
memset(flow,,sizeof(flow));
queue<int>q;
int F = ;
while (true)
{
memset(a,,sizeof(a));
a[s] = INF;
q.push(s);
while (!q.empty())
{
int u = q.front(); q.pop();
for (int i = ; i <= * N; i++)
if (!a[i] && cap[u][i] > flow[u][i])
{
a[i] = min(a[u],cap[u][i] - flow[u][i]);
p[i] = u;
q.push(i);
}
}
if (a[t] == ) break;
for (int u = t; u != s; u = p[u])
{
flow[p[u]][u] += a[t];
flow[u][p[u]] -= a[t];
}
F += a[t];
}
return F;
}
int main()
{
//freopen("sample.txt","r",stdin);
while (scanf("%d%d",&N,&M) != EOF)
{
memset(cap,,sizeof(cap));
for (int i = ; i <= N; i++) cap[i][i + N] = ;
while (M--)
{
int u,v;
scanf(" (%d,%d)",&u,&v);
v++;u++;
cap[u + N][v] = INF;
cap[v + N][u] = INF;
}
int ans = INF;
for (int i = ; i <= N; i++)
for (int j = ; j <= N; j++)
{
if (i == j) continue;
ans = min(ans,Edmonds_karp(i + N ,j));
}
if (ans == INF) ans = N;
printf("%d\n",ans);
}
return ;
}

UVALIVE 3031 Cable TV Network的更多相关文章

  1. POJ 1966 Cable TV Network

    Cable TV Network Time Limit: 1000MS   Memory Limit: 30000K Total Submissions: 4702   Accepted: 2173 ...

  2. POJ 1966 Cable TV Network(顶点连通度的求解)

                               Cable TV Network Time Limit: 1000MS   Memory Limit: 30000K Total Submissi ...

  3. UVA1660 电视网络 Cable TV Network

    题目地址:UVA1660 电视网络 Cable TV Network 枚举两个不直接连通的点 \(S\) 和 \(T\) ,求在剩余的 \(n-2\) 个节点中最少去掉多少个可以使 \(S\) 和 \ ...

  4. POJ 1966 Cable TV NETWORK(网络流-最小点割集)

                                    Cable TV NETWORK The interconnection of the relays in a cable TV net ...

  5. Cable TV Network 顶点连通度 (最大流算法)

    Cable TV Network 题目抽象:给出含有n个点顶点的无向图,给出m条边.求定点联通度   K 算法:将每个顶点v拆成 v'   v''  ,v'-->v''的容量为1.       ...

  6. ZOJ 2182 Cable TV Network(无向图点割-最大流)

    题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=2182 题意:给出一个无向图,问最少删掉多少个顶点之后图变得不连通 ...

  7. POJ 1966 Cable TV Network (无向图点连通度)

    [题意]给出一个由n个点,m条边组成的无向图.求最少去掉多少点才能使得图中存在两点,它们之间不连通. [思路]回想一下s->t的最小点割,就是去掉多少个点能使得s.t不连通.那么求点连通度就枚举 ...

  8. UVA 1660 Cable TV Network 电视网络(无向图,点连通度,最大流)

    题意:给一个无向图,求其点连通度?(注意输入问题) 思路: 如果只有1个点,那么输出“1”: 如果有0条边,那么输出“0”: 其他情况:用最大流解决.下面讲如何建图: 图的连通度问题是指:在图中删去部 ...

  9. UVA 1660 Cable TV Network

    题意: 求一个无向图的点连通度. 分析: 把一个点拆成一个入点和一个出点,之间连一条容量为1的有向边,表示能被用一次.最大流求最小割即可.套模板就好 代码; #include <iostream ...

随机推荐

  1. Matplotlib库介绍

    pyplot的plot()函数 pyplot的中文显示 pyplot的文本显示 pyplot的子绘图区域

  2. 大话CNN经典模型:LeNet

        近几年来,卷积神经网络(Convolutional Neural Networks,简称CNN)在图像识别中取得了非常成功的应用,成为深度学习的一大亮点.CNN发展至今,已经有很多变种,其中有 ...

  3. 【转帖】LoadRunner系统架构简介

    LoadRunner系统架构简介: LoadRunner是通过创建虚拟用户来代替真实实际用户来操作客户端软件比如Internet Explorer,来向IIS.Apache等Web服务器发送HTTP协 ...

  4. 3 web框架

    web框架 Web框架(Web framework)是一种开发框架,用来支持动态网站.网络应用和网络服务的开发.这大多数的web框架提供了一套开发和部署网站的方式,也为web行为提供了一套通用的方法. ...

  5. 9 Django 模型层(2) --多表操作

    创建模型 实例:我们来假定下面这些概念,字段和关系 作者模型:一个作者有姓名和年龄. 作者详细模型:把作者的详情放到详情表,包含生日,手机号,家庭住址等信息.作者详情模型和作者模型之间是一对一的关系( ...

  6. html5兼容处理&sublime text3配置html5环境

    1.为了兼容低版本的浏览器解析不了hmtl5标签,要在html文件中head内引入html5shiv.min.js文件 <!--[if lt IE 9]> <script src=& ...

  7. Python 绘制棋盘

    import turtle pen = turtle.Pen() pen.speed(10) width = 30 # 格子宽度 count = 18 # 横向纵向格子数 o = width * co ...

  8. 数据库——mysql内置功能(11)

    1.视图 视图是一个虚拟表(非真实存在),其本质是(根据SQL语句获取动态的数据集,并未其命名),用户使用时只需使用(名称)即可获取结果集,可以将该结果集当做表来使用 使用视图我们可以把查询过程中的临 ...

  9. PoolManager

    我用的PoolManager版本是5.5.2的,导入的包总共有三个文件夹:Editor,Plugins,PoolManagerExampleFiles 1.Editor这个文件夹里面的东西,顾名思义, ...

  10. [转载]kd tree

    [本文转自]http://www.cnblogs.com/eyeszjwang/articles/2429382.html k-d树(k-dimensional树的简称),是一种分割k维数据空间的数据 ...