UVA1660 电视网络 Cable TV Network
题目地址:UVA1660 电视网络 Cable TV Network
枚举两个不直接连通的点 \(S\) 和 \(T\) ,求在剩余的 \(n-2\) 个节点中最少去掉多少个可以使 \(S\) 和 \(T\) 不连通,在每次枚举的结构中取 \(min\) 就是本题的答案。
点边转化
把原来无向图中的每个点 \(x\) ,拆成入点 \(x\) 和出点 \(x'\) 。在无向图中删去一个点⇔在网络中断开 \((x,x')\) 。对 \(\forall x \neq S,x \neq T\) 连有向边 \((x,x')\) ,容量为 \(1\) 。对原无向图的每条边 \((x,y)\) ,连有向边 \((x',y),(y',x)\) ,容量为 \(+ \infty\) (防止割断)。
求最小割即可。
#include <bits/stdc++.h>
using namespace std;
const int N = 56, M = 2e4 + 6, inf = 0x3f3f3f3f;
int n, m, s, t;
int a[N*N], b[N*N], d[N<<1];
int Head[N<<1], Edge[M], Leng[M], Next[M], tot;
inline void add(int x, int y, int z) {
Edge[++tot] = y;
Leng[tot] = z;
Next[tot] = Head[x];
Head[x] = tot;
Edge[++tot] = x;
Leng[tot] = 0;
Next[tot] = Head[y];
Head[y] = tot;
}
inline bool bfs() {
memset(d, 0, sizeof(d));
queue<int> q;
q.push(s);
d[s] = 1;
while (q.size()) {
int x = q.front();
q.pop();
for (int i = Head[x]; i; i = Next[i]) {
int y = Edge[i], z = Leng[i];
if (z && !d[y]) {
q.push(y);
d[y] = d[x] + 1;
if (y == t) return 1;
}
}
}
return 0;
}
inline int dinic(int x, int f) {
if (x == t) return f;
int rest = f;
for (int i = Head[x]; i && rest; i = Next[i]) {
int y = Edge[i], z = Leng[i];
if (z && d[y] == d[x] + 1) {
int k = dinic(y, min(rest, z));
if (!k) d[y] = 0;
Leng[i] -= k;
Leng[i^1] += k;
rest -= k;
}
}
return f - rest;
}
inline void Cable_TV_Network() {
for (int i = 0; i < m; i++) {
char str[20];
scanf("%s", str);
a[i] = b[i] = 0;
int j;
for (j = 1; str[j] != ','; j++) a[i] = a[i] * 10 + str[j] - '0';
for (j++; str[j] != ')'; j++) b[i] = b[i] * 10 + str[j] - '0';
}
int ans = inf;
for (s = 0; s < n; s++)
for (t = 0; t < n; t++)
if (s != t) {
memset(Head, 0, sizeof(Head));
tot = 1;
int maxf = 0;
for (int i = 0; i < n; i++)
if (i == s || i == t) add(i, i + n, inf);
else add(i, i + n, 1);
for (int i = 0; i < m; i++) {
add(a[i] + n, b[i], inf);
add(b[i] + n, a[i], inf);
}
while (bfs()) {
int num;
while ((num = dinic(s, inf))) maxf += num;
}
ans = min(ans, maxf);
}
if (n <= 1 || ans == inf) ans = n;
cout << ans << endl;
}
int main() {
while (cin >> n >> m) Cable_TV_Network();
return 0;
}
UVA1660 电视网络 Cable TV Network的更多相关文章
- UVA1660 电视网络 Cable TV Network[拆点+最小割]
题意翻译 题目大意: 给定一个n(n <= 50)个点的无向图,求它的点联通度.即最少删除多少个点,使得图不连通. 解析 网络瘤拆点最小割. 定理 最大流\(=\)最小割 感性地理解(口胡)一下 ...
- 【UVA1660】Cable TV Network
题目大意:给定一个 N 个点的无向图,求至少删去多少个点可以使得无向图不连通. 题解:学习到了点边转化思想. 根据网络流的知识可知,一个网络的最小割与网络的最大流相等.不过最小割是图的边集,而本题则是 ...
- POJ 1966 Cable TV Network
Cable TV Network Time Limit: 1000MS Memory Limit: 30000K Total Submissions: 4702 Accepted: 2173 ...
- POJ 1966 Cable TV Network(顶点连通度的求解)
Cable TV Network Time Limit: 1000MS Memory Limit: 30000K Total Submissi ...
- POJ 1966 Cable TV NETWORK(网络流-最小点割集)
Cable TV NETWORK The interconnection of the relays in a cable TV net ...
- Cable TV Network 顶点连通度 (最大流算法)
Cable TV Network 题目抽象:给出含有n个点顶点的无向图,给出m条边.求定点联通度 K 算法:将每个顶点v拆成 v' v'' ,v'-->v''的容量为1. ...
- UVA 1660 Cable TV Network 电视网络(无向图,点连通度,最大流)
题意:给一个无向图,求其点连通度?(注意输入问题) 思路: 如果只有1个点,那么输出“1”: 如果有0条边,那么输出“0”: 其他情况:用最大流解决.下面讲如何建图: 图的连通度问题是指:在图中删去部 ...
- UVA-1660 Cable TV Network (最小割)
题目大意:给一张n个点.m条边的无向图,求最小点割集的基数. 题目分析:求无向图最小点割集的基数可以变成求最小割.考虑单源s单汇t的无向图,如果要求一个最小点集,使得去掉这个点集后图不再连通(连通分量 ...
- UVA1660 Cable TV Network (无向图的点连通度)
题意:求一个无向图的点连通度. 把一个点拆成一个入点和一个出点,之间连一条容量为1的有向边,表示能被用一次.最大流求最小割即可. 一些细节的东西:1.源点固定,汇点要枚举一遍,因为最小割割断以后会形成 ...
随机推荐
- Centos7安装Mysql5.7方法总结 - 实操手册
Centos7.x版本下针对Mysql的安装和使用多少跟之前的Centos6之前版本有所不同的,废话就不多赘述了,下面介绍下在centos7.x环境里安装mysql5.7的几种方法:一.yum方式安装 ...
- 2017-12-15python全栈9期第二天第三节之使用while循环输出0到10
#!/user/bin/python# -*- coding:utf-8 -*-count = 0while count < 10: count += 1 print(count)
- 安装saltstack使用的shell
sed -i 's/^#//g' /etc/yum.repos.d/centos6.8.repo sed -i 's/enabled=0/enabled=1/g' /etc/yum.repos.d ...
- zk创建集群
在单机环境下和创建集群. 需要注意的点: 配置数据文件myid 1/2/3 对应server.1/2/3 通过./zkCli.sh -server [ip]:[port] 检测集群是否创建成功 在z ...
- vs code配置git
在项目目录执行 git init 修改.git文件夹下的config文件 [core] repositoryformatversion = 0 filemode = false bare = fals ...
- SecureCRT通过拷贝配置文件登陆
不知道是不是SecureCRT有问题,有时候会出现配置丢失的情况,而自己又找不到密码了,于是从同事拷贝配置文件,发现可以成功复制服务器登陆信息 1.option -> global option ...
- 启动aspx文件错误
有一次,为了模仿翻页效果,设置的启动也是aspx文件.当时因为重装系统的原因,我的系统暂时不支持aspx文件的发布访问.所以,我就在MIME Type里面添加了对aspx文件的访问,如下图: 这样就可 ...
- 使用二分查找判断某个数在某个区间中--如何判断某个IP地址所属的地区
一,问题描述 给定100万个区间对,假设这些区间对是互不重叠的,如何判断某个数属于哪个区间? 首先需要对区间的特性进行分析:区间是不是有序的?有序是指:后一个区间的起始位置要大于前一个区间的终点位置. ...
- eventproxy 介绍这款好用的工具,前端事件式编程的思维
前端事件式编程 <script src="eventproxy.js"></script> <script> // EventProxy此时是一 ...
- man termios(FreeBSD 12.0)
TERMIOS() FreeBSD Kernel Interfaces Manual TERMIOS() NAME termios - general terminal line discipline ...