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

$ POJ~1966~Cable~TV~Network $

eMNR0K.png



$ solution: $

第一眼可能让人很难下手,但本就是冲着网络流来的,所以我们直接一点。这道题我们要让这个联通图断开,那么势必会有两个点变得不连通,这道题的数据范围很小,所以我们试着暴力枚举两个点。这样就变成了最小割。不过,嗯?割的东西怎么是点?

为了靠近我们已经学得知识,我们想办法看,能不能割点变成割边。反正网络流最喜欢千变万化、左右建模了。。。于是我们引进书上的一个东西:

  1. 一个节点可以拆成两个节点,将原节点用中间那条边表示
  2. 一条边可以拆成两条边,将原边用中间那个点表示
  3. 中间的边权为1代表这个点是否被割,旁边的边权为inf是为了排除其影响(因为它不可能被割掉)

我们用第一条和第三条性质可以解决这个问题。首先对于每个节点建立两个 $ i $ 和 $ i+n $ 节点。然后这两个节点之间用一条权值为1的有向边(从 $ i $ 到 $ i+n $ ) ,如果这条边在最小割中被割掉(等价于原本的点被割掉)。然后 $ i $ 节点连入边(权值正无穷), $ i+n $ 节点连出边(权值正无穷),连正无穷是为了让割掉的边只能是中间的边。然后我们跑一遍最大流,它对应的最小割里每条代表原来一个点,因为权值为1,所以流量就是答案。

注意:我们的源汇点也要被分为两个点,而网络流中的实际源点是 $ S+n $ ,它连出边。因为源汇点的性质,这两个点不可能被割掉,所以它们中间不连边。



$ code: $

#include<iostream>
#include<cstdio>
#include<iomanip>
#include<algorithm>
#include<cstring>
#include<cstdlib>
#include<ctime>
#include<cmath>
#include<vector>
#include<queue>
#include<map>
#include<set>#define ll long long
#define db double
#define rg register intusing namespace std;int n,m,S,T;
int ans,top=1;
int dep[505];
int tou[505];
int qi[505];
int f[55][55];struct su{int to,v,next;
}b[5005];inline int qr(){register char ch; register bool sign=0; rg res=0;while(!isdigit(ch=getchar()))if(ch=='-')sign=1;while(isdigit(ch))res=res*10+(ch^48),ch=getchar();if(sign)return -res; else return res;
}inline void add(int x,int y,int v){ //注意博主加边自带反向b[++top]=su{y,v,tou[x]}; tou[x]=top;b[++top]=su{x,0,tou[y]}; tou[y]=top;
}inline bool bfs(int x){for(rg i=1;i<=x;++i)qi[i]=tou[i],dep[i]=0;queue<int> q; q.push(S); dep[S]=1;while(!q.empty()){rg i=q.front(); q.pop();for(rg j=tou[i];j;j=b[j].next)if(b[j].v&&!dep[b[j].to]){dep[b[j].to]=dep[i]+1;if(b[j].to==T)return 1;q.push(b[j].to);}} return 0;
}inline int dfs(int i,int w){if(i==T||!w)return w;rg rest=w,f;for(rg &j=qi[i];j;j=b[j].next){if(b[j].v&&dep[b[j].to]==dep[i]+1){f=dfs(b[j].to,min(w,b[j].v));if(!f){dep[b[j].to]=-2; continue;}b[j].v-=f; b[j^1].v+=f; w-=f;} if(!w)break;}return rest-w;
}inline void solve(){rg res=0; top=1;for(rg i=1;i<=n*2+2;++i) tou[i]=0; //初始化for(rg i=1;i<=n;++i){if(i!=S&&i!=T)add(i,i+n,1); //一点拆成两点,中间连边for(rg j=1;j<=n;++j)if(f[i][j])add(i+n,j,1e9); //连边注意是否有加n操作} S=S+n;while(bfs(n*2+2)) res+=dfs(S,1e9); //DInicans=min(res,ans);
}int main(){//freopen(".in","r",stdin);//freopen(".out","w",stdout);rg t=qr();while(t--){n=qr();m=qr();for(rg i=1;i<=n;++i){for(rg j=i;j<=n;++j){f[i][j]=f[j][i]=0; //初始化}}for(rg i=1;i<=m;++i){rg x=qr()+1,y=qr()+1;f[x][y]=f[y][x]=1; //邻接矩阵读边}if(n==0||n==2){puts("0");continue;}if(m==0&&n&&n!=2){puts("1");continue;}//特判,这题有点卡细节ans=1e9;for(rg i=1;i<=n;++i){for(rg j=1;j<=n;++j){if(f[i][j]||i==j)continue; //注意两个相邻的点不可能通过割点不联通S=i;T=j; solve(); //枚举源汇点}} if(ans==1e9)ans=n; //无论怎么割点图都联通,就输出nprintf("%d\n",ans);}return 0;
}

转载于:https://www.cnblogs.com/812-xiao-wen/p/11257791.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/263079.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

harbor安装时出现ERROR: An HTTP request took too long to complete. Retry with --verbose to obtain debug in

harbor安装时出现ERROR: An HTTP request took too long to complete. Retry with --verbose to obtain debug information.If you encounter this issue regularly because of slow network conditions, consider setting COMPOSE_HTTP_TIMEOUT to a higher value current val…

几大开源项目

7-Zip 4.32&#xff1a;文件压缩工具&#xff0c;可与Windows资源管理器集成 A Note 4.2.1&#xff1a;可在Windows桌面放置便笺&#xff0c;并可提供闹钟提醒功能 Abakt 0.9&#xff1a;能够以压缩方式对文档进行备份 Abiword 2.27&#xff1a;Windows写字板的替代程序&…

如何恢复Linux下被误删除的文件以及如何防止文件被删除

【卸载被误删除文件所在的分区&#xff0c;或以只读方式mount】当你发现你误删除了文件后&#xff0c;要做的第一件事情是马上卸载被误删除文件所在分区&#xff0c;或者以只读的方式来挂在该防区。如果误删除的是根分区&#xff0c;最好直接断电&#xff0c;进入单用户模式&am…

配置msdtc

配置msdtc需要分别配置数据库服务器和开发机&#xff0c;因为只有两个机器都配置正确了&#xff0c;分布式事务才不会报乌七八糟的错误。如果数据库服务器和开发机是同一台机器&#xff0c;那就不用看本文了&#xff0c;因为不存在分布式事务的问题。 数据库服务器和开发机中配…

GooglePR说明

内容摘要&#xff1a;无论是对普通网络冲浪者还是网站管理员来说&#xff0c;Google都是目前世界范围内最受欢迎的搜索引擎。它每天处理的搜索请求高达1.5亿次&#xff0c;几乎占全球所有搜索量的1/3。网络冲浪者对Google情有独钟&#xff0c;是由于Google所提供的快速搜索速度…

什么是套接字?Socket基本介绍

什么是套接字&#xff1f;Socket基本介绍一、什么是套接字&#xff1f;二、套接字特性三、套接字缓冲区一、什么是套接字&#xff1f; 套接字是一种通信机制&#xff08;通信的两方的一种约定&#xff09;&#xff0c;socket屏蔽了各个协议的通信细节&#xff0c;提供了tcp/ip…

[ZJOI2007] 时态同步

题面 显然的一个建模是&#xff0c;每个叶子对应一个权值&#xff0c;代表比最晚的叶子早了多久&#xff0c;然后我们要做的就是给每条边赋上值&#xff0c;使得每个叶子到根的路径上的所有边权值和等于叶子的权值。 我们贪心的想一想&#xff0c;必然是离根越近的边赋值多的情…

dsad

应该来说这是两两配对的时间 mouseenter和mouseleave是只对选中的元素的生效 mouseover和mouseout是只对选中的元素及其子元素生效 <iframe width"100%" height"300" src"//jsfiddle.net/xiadd/4hno1wgf/embedded/" allowfullscreen"all…

ARM-Button-Driver-硬件图

1、实物图 2、CPU接线图 3、实际硬件接图 转载于:https://www.cnblogs.com/xmphoenix/archive/2011/11/02/2233519.html

动态创建ActiveRecord条件的查询 MyQuery

在CMS中。我们经常会按一定的条件来进行搜索。如果用户没有选择这个条件的话&#xff0c;我们就不能将它放到sql中也许我们可以用自己拼装sql语句的方式很好的实现这种查询。然后再前面过滤掉一些危险的参数但是参数过滤有一个不好的地方是。会把一些信息给过滤掉了。在castle …

kubenetes中port、targetPort、nodePort、containerPort的区别与联系

kubenetes中port、targetPort、nodePort、containerPort的区别与联系首先给出一张kubenetes结构图&#xff1a;containerPort containerPort是在pod控制器中定义的、pod中的容器需要暴露的端口。Pod中容器暴露的端口 targetPort targetPort是pod上的端口&#xff0c;从port/nod…

Entity Framework中使用IEnumerableT、IQueryableT及IListT的区别

1. IEnumerable<T> IEnumerable<T> &#xff1a;对于在内存中集合上运行的方法&#xff0c;返回的可枚举对象将捕获传递到方法的参数。在枚举该对象时&#xff0c;将使用查询运算符的逻辑&#xff0c;并返回查询结果。 IEnumerable<T>在.Net2.0引入。 IEnumb…

█年薪20万招聘软件工程师!!!

工作地点&#xff1a;日本 工作类型&#xff1a;全职 职位类别&#xff1a;软件研发 招聘人数&#xff1a;60人 婚姻状况&#xff1a;不限 工作经验&#xff1a;1年 年龄要求&#xff1a;20-36岁 性别要求&#xff1a;不限 学…

UIView编程体验(一)

尽管这不是一个新的话题&#xff0c;但是实际上UIView是很多控件的基础类&#xff0c;而且界面的布局基本是基于UIView来的&#xff0c;当然我们也可以使用CGLayer,本文仅列举一些个人在使用UIView过程中的经验和大家分享。大部分的内容来源于UIView Programming Guide,这个gui…

解决Spring下无法实时访问本地静态资源

解决Spring下浏览器无法实时访问本地静态资源场景1&#xff1a;原本地文件test.json中内容为 “1”。我们通过前后端交互操作&#xff0c;修改test.json的内容为 “2”。此时前端再次读取test.json&#xff0c;会发现内容依旧为 “1”&#xff0c;即前端并不会实时同步本地静态…

java传值和通过引用传递

第一次使用int实验&#xff1a; public class TTEST {private static List<UserEntity> mList new LinkedList<UserEntity>(); public static void main(String[] args) {int a 0;changeA(a);System.out.println("a "a);}public static void change…

好消息:VS 2008 and .NET 3.5 Beta 2 发布了

消息来源:http://weblogs.asp.net/scottgu/archive/2007/07/26/vs-2008-and-net-3-5-beta-2-released.aspx下载地址http://www.microsoft.com/downloads/results.aspx?DisplayLangen&nr20&freetextvisualstudio2008&sortCriteriadate特点:- VS 2008 Multi-Targeti…

android 之数据存储(IO)

android 操作文件分为两种&#xff0c; 第一种&#xff1a;直接写到手机内存中&#xff0c;手机内存有限。 第二种&#xff1a;写到手机的内存卡(SD)中&#xff0c;进行操作文件。 以下分为两种情况的读精心操作&#xff0c;一个简单的demo.在此做一个记录。 代码。 package co…

Aspose.Java实现word转pdf,添加水印等操作

Aspose.Java实现word转pdf&#xff0c;添加水印等操作一. word转pdf二. 文档插入水印Aspose是一款商用版控件&#xff0c;支持各类文档操作&#xff0c;这里主要介绍如何在Springboot项目中使用破解版。 一. word转pdf 在项目中导入aspose.word包 百度网盘下载 提取码&#x…

django 1.8 官方文档翻译: 3-4-2 内建显示视图

Django 文档协作翻译小组人手紧缺&#xff0c;有兴趣的朋友可以加入我们&#xff0c;完全公益性质。 交流群&#xff1a;467338606 网站&#xff1a;http://python.usyiyi.cn/django/index.html 基于类的内建通用视图 编写Web应用可能是单调的&#xff0c;因为你需要不断的重复…