<题目链接>

题目大意:

给定一个无向图,求点连通度,即最少去掉多少个点使得图不连通。

解题分析:

解决点连通度和边连通度的一类方法总结见   >>>

本题是求点连通度,所以对每个点进行拆点,然后入点向出点连一条容量为1的边,其它边则是用一个容量为INF的边来代替。然后就是枚举一下源点和汇点,跑最大流,选最小的值即可。不过,本题需要注意一下是否为完全图,因为完全图的最大流是INF,所以特判一下,如果是完全图,就将点全部删除,输出n。

#include <cstdio>
#include <iostream>
#include <algorithm>
#include <vector>
#include <queue>
#include <cstring>
using namespace std; typedef long long ll;
const int N = , INF = 0x3f3f3f3f; struct Dinic
{
struct edge{ int from,to;ll cap,flow; }; //cap-flow才是这条边的真实流量
vector<edge>es;
vector<int>G[N];
bool vis[N];
int dist[N],iter[N];
void init(int n){
for(int i=; i<=n+; i++)G[i].clear();
es.clear();
}
void addedge(int from,int to,ll cap){
es.push_back((edge){from,to,cap,}); //将边存储的边表
es.push_back((edge){to,from,,});
int x=es.size();
G[from].push_back(x-); //G[u][i]记录以u为顶点的第i条边的反边在es中的编号
G[to].push_back(x-);
}
bool BFS(int s,int t){ //bfs将该图划分成分层图
memset(vis,,sizeof(vis));
queue <int> q;
vis[s]=;
dist[s]=;
q.push(s);
while(!q.empty()){
int u=q.front();q.pop();
for(int i=; i<G[u].size(); i++){
edge &e=es[G[u][i]];
if(!vis[e.to]&&e.cap>e.flow){
vis[e.to]=;
dist[e.to]=dist[u]+;
q.push(e.to);
}
}
}
return vis[t];
}
int DFS(int u,int t,ll f){
if(u==t||f==)return f;
int nowflow=,d;
for(int &i=iter[u]; i<G[u].size(); i++){
edge &e=es[G[u][i]];
if(dist[u]+==dist[e.to]&&(d=DFS(e.to,t,min(f,e.cap-e.flow)))>){
e.flow+=d; //正边真实流量-d
es[G[u][i]^].flow-=d; //反边真实流量+d
nowflow+=d; //得到现在搜得的能够流入汇点的流量
f-=d; //找到一条增广路之后,减去这条路的流量,然后继续从这个顶点的其它边开始寻找增广路
if(f==)break;
}
}
return nowflow;
}
int Maxflow(int s,int t){
int flow=;
while(BFS(s,t)){
memset(iter,,sizeof(iter));
int d=;
while(d=DFS(s,t,INF))flow+=d;
}
return flow;
}
}dinic; int mpa[][];
int n,m; inline void getGraph(){
dinic.init(*n+);
for(int i=;i<n;i++){
for(int j=;j<n;j++){
if(i==j)dinic.addedge(i,i+n,);
else if(mpa[i][j])dinic.addedge(i+n,j,INF);
}
}
} int main(){
while(cin>>n>>m){
memset(mpa,,sizeof(mpa));
for(int i=;i<=m;i++){
int u,v;scanf(" (%d,%d)",&u,&v);
mpa[u][v]=mpa[v][u]=;
}
int ans=INF;
for(int st=;st<n;st++){
for(int ed=st+;ed<n;ed++){
getGraph();
ans=min(ans,dinic.Maxflow(st+n,ed)); //注意这里是st+n
}
}
if(ans>n)ans=n; //如果是完全图,最大流就是INF,只能全部删除,才能使得原图不连通
printf("%d\n",ans);
}
}

POJ 1966 Cable TV Network (点连通度)【最小割】的更多相关文章

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

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

  2. POJ 1966 Cable TV Network (最大流最小割)

    $ POJ~1966~Cable~TV~Network $ $ solution: $ 第一眼可能让人很难下手,但本就是冲着网络流来的,所以我们直接一点.这道题我们要让这个联通图断开,那么势必会有两个 ...

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

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

  4. POJ 1966 Cable TV Network

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

  5. POJ 1966 Cable TV Network 【经典最小割问题】

    Description n个点的无向图,问最少删掉几个点,使得图不连通 n<=50 m也许可以到完全图? Solution 最少,割点,不连通,可以想到最小割. 发现,图不连通,必然存在两个点不 ...

  6. UVA-1660 Cable TV Network (最小割)

    题目大意:给一张n个点.m条边的无向图,求最小点割集的基数. 题目分析:求无向图最小点割集的基数可以变成求最小割.考虑单源s单汇t的无向图,如果要求一个最小点集,使得去掉这个点集后图不再连通(连通分量 ...

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

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

  8. POJ - 1966 Cable TV Network (最大流求点连通度)

    题意:求一个无向图的点连通度.点联通度是指,一张图最少删掉几个点使该图不连通:若本身是非连通图,则点连通度为0. 分析:无向图的点连通度可以转化为最大流解决.方法是:1.任意选择一个点作为源点:2.枚 ...

  9. poj 1966 Cable TV Network 顶点连通度

    题目链接 给一个图, n个点m条边, 求至少去掉多少个点可以使得图不再联通.随便指定一个点为源点, 枚举其他点为汇点的情况, 跑网络流, 求其中最小的情况. 如果最后ans为inf, 说明是一个完全图 ...

随机推荐

  1. HBase 在HDFS上的物理目录结构

    根目录 配置项 hbase.rootdir 默认 "/hbase" 根级文件 /hbase/WALs 被HLog实例管理的WAL文件. /hbase/WALs/data-hbase ...

  2. python之路(5)文件操作(open)

      目录 前言 文件的打开模式 文件句柄的方法 seek()方法介绍 前言 打开文件,得到文件句柄并赋值给一个变量 通过句柄对文件进行操作 关闭文件 f = open('demo.txt','r',e ...

  3. 安装部署 Goaccess

    CentOS 7安装 Goaccess 安装依赖 # yum install ncurses-devel geoip-devel libmaxminddb-devel tokyocabinet-dev ...

  4. CSS之Background

    实验环境 [Windows 10] Chrome 73.0.3683.103(386,64bit) background作用范围 content+padding 参考文献 [1] CSS backgr ...

  5. Thunar 通过快捷键在当前文件夹打开终端

    参考『Keyboard shortcut for open terminal here in thunar』\(^{[1]}\) 在 ganiserb/thunar-terminal 下载脚本. 将脚 ...

  6. orcle数据库表中字段值含有单引号,如何模糊搜索?

    例如:T_table表中,name字段值为:字符串含有‘单引号’: SQL模糊搜索语句应该如下:select * from T_table where name like '%含有''单引号''%'

  7. Javamail pop3连接QQ邮箱遇到最深的坑

    在使用pop3邮箱连接QQ邮箱接受邮件的时候遇到如下错误 Login fail. A secure connection is requiered(such as ssl) 此时按照错误提示添加如下配 ...

  8. Docker-----仓库

    安装registry 安装并启动docker yum -y install docker systemctl enable docker systemctl start docker 下载regist ...

  9. Java 多线程 - Java对象头, Monitor

    详见: http://www.cnblogs.com/pureEve/p/6421273.html

  10. 处理H5新标签方法

    语义化 HTML5中加入了更加具有语义化的标签,比如header,nav,footer等,可以为搜索引擎优化,让爬虫能更好地理解网页结构. 但是对于新标签的兼容性不是很好,IE9以下旧版本不支持新的语 ...