题目链接:点击查看

题目大意:给定一张无向图,求最少去掉多少个点,可以使图不连通

题目分析:让图不连通,也就是让图分成两个部分,这样题目就转换成了最小割的问题了,不过最小割问题是要求最小割边,所以我们需要将每个点都拆成一个入点i和一个出点i+n,其边权为1,然后给出的无向边u->v,可以表示为u+n->v和v+n->u,边权为无穷大,这样建完边后,我们还是不确定该怎么将图分成两部分,因为顶点只有50个,所以我们可以枚举源点和汇点,这样每次维护最小值就好了,记得要从源点的出点跑到汇点的入点结束

对了,需要注意的是用dinic算法每次都会改变每条边的流量,所以每次跑dinic之前都要重新赋值

代码:

#include<iostream>
#include<cstdlib>
#include<string>
#include<cstring>
#include<cstdio>
#include<algorithm>
#include<climits>
#include<cmath>
#include<cctype>
#include<stack>
#include<queue>
#include<list>
#include<vector>
#include<set>
#include<map>
#include<sstream>
using namespace std;typedef long long LL;const int inf=0x3f3f3f3f;const int N=110;struct Edge
{int to,w,next;
}edge[N*N],temp[N*N];//边数int head[N],cnt;void addedge(int u,int v,int w)
{temp[cnt].to=v;temp[cnt].w=w;temp[cnt].next=head[u];head[u]=cnt++;temp[cnt].to=u;temp[cnt].w=0;//反向边边权设置为0temp[cnt].next=head[v];head[v]=cnt++;
}int d[N],now[N*N];//深度 当前弧优化bool bfs(int s,int t)//寻找增广路
{memset(d,0,sizeof(d));queue<int>q;q.push(s);now[s]=head[s];d[s]=1;while(!q.empty()){int u=q.front();q.pop();for(int i=head[u];i!=-1;i=edge[i].next){int v=edge[i].to;int w=edge[i].w;if(d[v])continue;if(!w)continue;d[v]=d[u]+1;now[v]=head[v];q.push(v);if(v==t)return true;}}return false;
}int dinic(int x,int t,int flow)//更新答案
{if(x==t)return flow;int rest=flow,i;for(i=now[x];i!=-1&&rest;i=edge[i].next){int v=edge[i].to;int w=edge[i].w;if(w&&d[v]==d[x]+1){int k=dinic(v,t,min(rest,w));if(!k)d[v]=0;edge[i].w-=k;edge[i^1].w+=k;rest-=k;}}now[x]=i;return flow-rest;
}void init()
{memset(head,-1,sizeof(head));cnt=0;
}int solve(int st,int ed)
{memcpy(edge,temp,sizeof(temp));int ans=0,flow;while(bfs(st,ed))while(flow=dinic(st,ed,inf))ans+=flow;return ans;
}int main()
{
//  freopen("input.txt","r",stdin);
//  ios::sync_with_stdio(false);int n,m;while(scanf("%d%d",&n,&m)!=EOF){init();while(m--){int a,b;scanf(" (%d,%d)",&a,&b);addedge(a+n,b,inf);addedge(b+n,a,inf);}for(int i=0;i<n;i++){addedge(i,i+n,1);addedge(i+n,i,1);}int ans=n;for(int i=0;i<n;i++)for(int j=i+1;j<n;j++)ans=min(ans,solve(i+n,j));printf("%d\n",ans);}return 0;
}

POJ - 1966 Cable TV Network(最小割-最大流)相关推荐

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

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

  2. [POJ 1966] Cable TV Network

    [题目链接] http://poj.org/problem?id=1966 [算法] 拆点 + 最小割 [代码] #include <algorithm> #include <bit ...

  3. POJ 1966 Cable TV Network【无向图点连通度 最小割 E-K算法求最大流】

    题目描述: 给你一个无向图,问你最少删掉几个点,使这个图成不连通. 解题报告: 概念 (1)一个具有 N 个顶点的图,在去掉任意 k-1 个顶点后 (1<=K<=N) 所得的子图仍连通, ...

  4. poj 1966 Cable TV Network

    求删除最少的点使得图不联通 将每一个点拆分为i,i',连接i,i'为1,若原图中存在g[u][v] = 1,连接u'到v,容量为INF,连接u,u'为1,连接v,v'为1 枚举源点和汇点,求出最小的最 ...

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

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

  6. hdu 4289(最小割最大流定理)

    题意:有N个城市,现在城市S出现了一伙歹徒,他们想运送一些炸弹到D城市,不过警方已经得到了线报知道他们的事情,不过警察不知道他们所在的具体位置,所以只能采取封锁城市的办法来阻断暴徒,不过封锁城市是需要 ...

  7. HDU-1569 方格取数(2) 最小割最大流

    题义很简单,还记得方格取数(1)的时候,使用状态压缩写的,这里由于行列数太大,因此无法进行压缩.所以要运用的最小割最大流的思想来解这道题. 大概是这样分析的,题义是要我们求在一个方格内取出N个点,使得 ...

  8. Destroying The Graph 最小点权集--最小割--最大流

    Destroying The Graph 构图思路: 1.将所有顶点v拆成两个点, v1,v2 2.源点S与v1连边,容量为 W- 3.v2与汇点连边,容量为 W+ 4.对图中原边( a, b ), ...

  9. 网络流 最大流 最小割 费用流

    [腾讯文档]网络流初步 网络流初步 文章目录 网络流初步 一.网络流简介 1. 网络 2. 流 3. 再次理解网络流 二.常见题型(三种) 三.相关问题对应算法介绍 1.最大流 (1) FF算法 - ...

最新文章

  1. VTK:Points之FitImplicitFunction
  2. 你真敢ZAO吗?解读换脸AI “细思极恐” 的用户协议
  3. 编解码再进化:Ali266与下一代视频技术
  4. opengl实现三维动画简单代码_使用Python简单实现马赛克拼图!内附完整代码
  5. td里面字体大小怎么改_教你王者荣耀改战区
  6. apimac版 java_jdk1.8 mac官方下载-Java SE Development Kit 8 mac下载8u181 官方最新版__西西软件下载...
  7. Host aggregate分区
  8. 电脑里面英文系统的中文简介
  9. Java进制转换问题(详解)
  10. 服务器外接显卡不显示,RE: power edge T620按照第二块显卡,不能正常工作,操作系统中查看驱动程序安装正常,工作正常,外接显示器无独立信号...
  11. 向量化回测系列2——全市场股票回测
  12. 你不可不知的《哈利波特》秘密(二)
  13. dicom是指_DCM是什么文件
  14. 减肥--应该是种轻松愉快的经历
  15. 犹他大学计算机图形学硕士专业,犹他大学专业设置.doc
  16. nginx服务器如何禁止访问目录(但是可以访问具体内容)
  17. java数组末尾添加元素_java数组添加元素,java数组如何添加一个元素
  18. 常见物联网近距离无线通信技术解析
  19. Eclipse添加Tomcat
  20. 画线 css,CSS画线方法

热门文章

  1. MyBatis 缓存详解-一级缓存的不足
  2. canal数据同步(应用场景)
  3. 几种类加载器的使用体会
  4. 使用RSA算法生成令牌
  5. ReactJS入门之生命周期
  6. 微服务 Docker和DevOps
  7. Redisson框架框架集成
  8. 分布式Session一致性概述
  9. 按键改变元素背景颜色 链式编程的原理 评分案例 each方法的使用
  10. Netty--Future和Promise