UVA1660 Cable TV Network (无向图的点连通度)
题意:求一个无向图的点连通度。
把一个点拆成一个入点和一个出点,之间连一条容量为1的有向边,表示能被用一次。最大流求最小割即可。
一些细节的东西:1.源点固定,汇点要枚举一遍,因为最小割割断以后会形成连通分量,在分割以后那个连通分量里的割会更大。
2.每次枚举重建一下图。3.从入点进,出点出,才认为是经过了一个原来的点,那么源点和汇点是不必经过的,所以一个在出点,另外一个枚举入点。
#include<bits/stdc++.h>
using namespace std; const int maxn = ; struct Edge
{
int v,cap,nxt;
}; vector<Edge> E;
vector<Edge> bak;
#define PB push_back int head[maxn]; void AddEdge(int u,int v,int c)
{
bak.PB({v,c,head[u]});
head[u] = bak.size()-;
bak.PB({u,,head[v]});
head[v] = bak.size()-;
} int S,T,cur[maxn],d[maxn],q[maxn]; bool bfs()
{
memset(d,,sizeof(d));
int l = , r = ;
q[r++] = S; d[S] = ;
while(r>l){
int u = q[l++];
for(int i = head[u]; ~i; i = E[i].nxt){
Edge &e = E[i];
if(!d[e.v] && e.cap>){
d[e.v] = d[u] + ;
q[r++] = e.v;
}
}
}
return d[T];
} int dfs(int u,int a)
{
if(u == T||!a) return a;
int flow = ,f;
for(int &i = cur[u]; ~i; i = E[i].nxt){
Edge &e = E[i];
if(d[e.v] == d[u]+ && (f = dfs(e.v,min(a,e.cap)))>){
flow += f; a -= f;
e.cap -= f; E[i^].cap += f;
if(!a) break;
}
}
return flow;
} const int INF = 0x3f3f3f3f; int MaxFlow()
{
int flow = ;
while(bfs()){
memcpy(cur,head,sizeof(head));
flow += dfs(S,INF);
}
return flow;
}
int n,m; void init()
{
memset(head,-,sizeof(head));
bak.clear();
} int main()
{
//freopen("in.txt","r",stdin);
while(~scanf("%d%d",&n,&m)){
init();
for(int i = ; i < n; i++) AddEdge(i,i+n,);
for(int i = ; i < m; i++){
int u,v; scanf(" (%d,%d)",&u,&v);
AddEdge(u+n,v,INF); AddEdge(v+n,u,INF);
}
int ans = n;
S = n;
for(T = ; T < n; T++){
E = bak;
ans = min(ans,MaxFlow());
}
printf("%d\n",ans);
}
return ;
}
UVA1660 Cable TV Network (无向图的点连通度)的更多相关文章
- POJ 1966 Cable TV Network (无向图点连通度)
[题意]给出一个由n个点,m条边组成的无向图.求最少去掉多少点才能使得图中存在两点,它们之间不连通. [思路]回想一下s->t的最小点割,就是去掉多少个点能使得s.t不连通.那么求点连通度就枚举 ...
- UVA-1660 Cable TV Network (最小割)
题目大意:给一张n个点.m条边的无向图,求最小点割集的基数. 题目分析:求无向图最小点割集的基数可以变成求最小割.考虑单源s单汇t的无向图,如果要求一个最小点集,使得去掉这个点集后图不再连通(连通分量 ...
- uva1660 Cable TV Network
点连通度:最少删除几个点使图不连通 拆点就变成了最小割 注意编号.画图就知道u’连v,v’连u. 技巧:不需要枚举S,T.固定S,枚举T即可 这种输入很烦, scanf(" (%d,%d)& ...
- UVA1660 电视网络 Cable TV Network
题目地址:UVA1660 电视网络 Cable TV Network 枚举两个不直接连通的点 \(S\) 和 \(T\) ,求在剩余的 \(n-2\) 个节点中最少去掉多少个可以使 \(S\) 和 \ ...
- POJ 1966 Cable TV Network(顶点连通度的求解)
Cable TV Network Time Limit: 1000MS Memory Limit: 30000K Total Submissi ...
- Cable TV Network 顶点连通度 (最大流算法)
Cable TV Network 题目抽象:给出含有n个点顶点的无向图,给出m条边.求定点联通度 K 算法:将每个顶点v拆成 v' v'' ,v'-->v''的容量为1. ...
- 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 The interconnection of the relays in a cable TV net ...
- UVA 1660 Cable TV Network 电视网络(无向图,点连通度,最大流)
题意:给一个无向图,求其点连通度?(注意输入问题) 思路: 如果只有1个点,那么输出“1”: 如果有0条边,那么输出“0”: 其他情况:用最大流解决.下面讲如何建图: 图的连通度问题是指:在图中删去部 ...
随机推荐
- 3.15-3.21 hive项目实战
一.创建表并导入日志数据,引出问题 ##建表 hive (default)> create table IF NOT EXISTS default.bf_log_src( > remote ...
- E20180514-hm
invalid adj. 无效的; 不能成立的; 有病的; 病人用的; readiness n. 准备就绪; 愿意,乐意
- Codeforces Round #439 (Div. 2)C - The Intriguing Obsession(简单dp)
传送门 题意 给出三个集合,每个集合的元素数量为a,b,c,现在需要连边,满足集合内元素不可达或最短路为3,求可行方案数 分析 设dp[i][j]为a集合元素为i个,b集合元素为j个的可行方案,易知( ...
- POJ3734【状压枚举】
题意: 给你两个01矩阵,去掉矩阵B的某些行和某些列,问处理后的矩阵B能否变成矩阵A: 思路: 数据较小,状压枚举B矩阵列的数量=A矩阵列的数量时的状态,然后搞定了列,贪心判断B矩阵的行就好了: #i ...
- Codeforces712C【贪心】
看了这篇.. http://blog.csdn.net/queuelovestack/article/details/52503162 直接就是从小到大,那么每次按最大的递增顺序上去,就是了. 因为每 ...
- C 语言实例 - 计算字符串长度
C 语言实例 - 计算字符串长度 C 语言实例 C 语言实例 计算字符串长度. 实例 - 使用 strlen() #include <stdio.h> #include <strin ...
- Android NFC P2P
http://www.nfc.cc/2011/12/28/development-android-beam-and-nfc-peer-2-peer/
- JS实现 类的 1.判断 2.添加 3.删除 4切换
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- 为什么会出现lvs+nginx
一.ngix(应用层 网络七层负载均衡) 1.异步转发,请求数据和相应数据都要经过ngix,ngix和客户端建立连接 2.轮询所有的tomcat服务器,保证请求成功或者最后一台tomcat服务器也请求 ...
- Action类为何要 extends ActionSupport以及实现ModelDriven
http://blog.sina.com.cn/s/blog_164e377490102wqhk.html