热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

UVA1660电视网络CableTVNetwork[拆点+最小割]

题意翻译题目大意:给定一个n(n

题意翻译

题目大意&#xff1a; 给定一个n(n <&#61; 50)个点的无向图&#xff0c;求它的点联通度。即最少删除多少个点&#xff0c;使得图不连通。

解析

网络瘤拆点最小割。

定理

最大流\(&#61;\)最小割

感性地理解&#xff08;口胡&#xff09;一下&#xff1a;首先显然最大流\(<&#61;\)割&#xff0c;而根据最大流定义&#xff0c;最小割恰恰就是要恰好割断最大流经过的所有最窄流量的边集&#xff0c;就能恰好使得源点和汇点不连通&#xff0c;即最大流\(&#61;\)最小割。

至于具体的证明&#xff0c;我也不知道


拆点

一般来说&#xff0c;正常的拆点有两个作用&#xff1a;

  1. 在不改变原图连通性的情况下&#xff0c;将点权转化为边权。
  2. 通过化点为边&#xff0c;限制通过某点的流量。

对于无向图和有向图&#xff0c;一般意义上的拆点做法是相同的。


一般做法&#xff1a;以有向图为例&#xff0c;对于原图中的一个点对\((x,y)\)&#xff0c;且有一条有向边\(c(x,y)\)。我们将其分别拆成两个点\(x,x&#39;,y,y&#39;\)&#xff0c;然后\(x\rightarrow x&#39;,y\rightarrow y&#39;\)这样连接有向边&#xff0c;如果原来的点有点权那么将有向边的边权赋值为点权&#xff0c;如果没有点权则赋值为1。对于原图存在的有向边&#xff0c;连接\(x&#39;\rightarrow y\)

对于无向边&#xff0c;我们再连一条边\(y&#39;\rightarrow x\)即可。


那么对于本题&#xff0c;显然是一个求最少割点&#xff0c;我们转化为拆点最大流做。

注意可能有多组数据。

参考代码

#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#define INF 0x3f3f3f3f
#define N 110
using namespace std;
struct node{int next,ver,leng;
}g[N<<1];
int tot,head[N],d[N],n,m,a[N],b[N],s,t;
inline void add(int x,int y,int val)
{g[&#43;&#43;tot].ver&#61;y,g[tot].leng&#61;val;g[tot].next&#61;head[x],head[x]&#61;tot;
}
inline bool bfs()
{memset(d,0,sizeof(d));queue q;d[s]&#61;1;q.push(s);while(q.size()){int x&#61;q.front();q.pop();for(int i&#61;head[x];i;i&#61;g[i].next){int y&#61;g[i].ver,z&#61;g[i].leng;if(!z||d[y]) continue;d[y]&#61;d[x]&#43;1;if(y&#61;&#61;t) return 1;q.push(y);}}return 0;
}
inline int dinic(int x,int flow)
{if(x&#61;&#61;t) return flow;int rest&#61;flow;for(int i&#61;head[x];i&&rest;i&#61;g[i].next){int y&#61;g[i].ver,z&#61;g[i].leng;if(!z||d[y]!&#61;d[x]&#43;1) continue;int k&#61;dinic(y,min(rest,z));if(!k) d[y]&#61;0;else{g[i].leng-&#61;k;g[i^1].leng&#43;&#61;k;rest-&#61;k;}}return flow-rest;
}
int main()
{while(~scanf("%d%d",&n,&m)){int ans&#61;INF;for(int i&#61;0;i}

转:https://www.cnblogs.com/DarkValkyrie/p/11376443.html



推荐阅读
  • 参考官方:https:docs.autofac.orgenlatestintegrationaspnetcore.html#startup-class有一些变动,现在暂时还没用ne ... [详细]
  • mybatis 逆向生成后遵循java驼峰法则的解决
    这篇文章主要介绍了mybatis逆向生成后遵循java驼峰法则的解决,具有很好的参考价值,希望对大家有所帮助。一 ... [详细]
  • CGPathAddArc & CGPathAddArcToPoint
    CGPathAddArc&CGPathAddArcToPoint参考:http:blog.csdn.netxcysuccess3articledetails24001571CGPa ... [详细]
  • 本文由编程笔记#小编为大家整理,主要介绍了html不邮寄相关的知识,希望对你有一定的参考价值。 ... [详细]
  • #B.BalancedBreakdown#####1.题目大意:给定一个n,从n中不断分离回文数(翻转后大小相同的数字)问最少需要多少步,输出最少步数以及一种方案(方案不唯一)## ... [详细]
  • JetBrains RubyMine 2021 for Mac(Ruby代码编辑工具) v2021.2.2中文激活版
    内容介绍RubyMine2021一款全面的Ruby代码编辑器,可以识别动态语言细节。RubyMine破解版提供智能编码辅助,智能代码重构和深度代码分析功能。通过简单的项目配置,自动 ... [详细]
  • C++中没有提供string类型的大小写转换,今天写了一下,方法很多#include<iostream>#include<string>#inclu ... [详细]
  • key_ctrl主要用于监控键盘按钮,定义按钮功能,便于智能车的控制和调试该包主要包含:key.hkey_ctrl_node.cpp ... [详细]
  • Java IO流学习总结(2)
    写在前面:本文章基本覆盖了javaIO的全部内容,java新IO没有涉及,因为我想和这个分开,以突出那个的重要性,新IO哪一篇文章还没有开始写,估计很快就能和大家见面。照旧,文章依 ... [详细]
  • **实验3.4*使用上题的矩形类,编程统计若干块土地的相关信息*由用户输入每块儿土地的长与宽,程序将相关结果输出**importjava.util.*;publicclassa ... [详细]
  • 深入研究虚幻4反射系统实现原理(一)
    上一篇翻译的文章里面提到了UE4反射系统的基本原理与应用,这次我们通过代码来深入研究一下UE4的反射系统,因为反射系统在UE4中牵扯的东西较多,所以我打算分几篇文章分析。我这里假定 ... [详细]
  • 什么是值传递,什么是引用传递。为什么说Java中只有值传递。
    关于这个问题,在StackOverflow上也引发过广泛的讨论,看来很多程序员对于这个问题的理解都不尽相同,甚至很多人理解的是错误的。还有的人可能知道Java中的参数传递是值传递, ... [详细]
  • 说到正则表达式,网上有很多的通用的表达式,可是事实上说来,一般人的都不愿意去拿来研究,就是拿来就直接用就行了.可是,事实上,可能有些时候,项目中或公司里的实际情况不一样,得要修改一 ... [详细]
  • 本文主要讲述以下几个方面:  1.元字符  2.贪婪匹配  3.实例1.元字符.匹配任意一个字符,除换行符^匹配以一个字符开头的字符串‘$’ ... [详细]
  • 感觉比数组好用,首选。packagemainimport(fmt)mainistheentryoftheprogramfuncmain(){ ... [详细]
author-avatar
中国地产人
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有