ZOJ 2182 Cable TV Network(无向图点割-最大流)
题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=2182
题意:给出一个无向图,问最少删掉多少个顶点之后图变得不连通?
思路:将原图每个点拆点(i,i+n),连边<i,i+n,1>,对原图的边(u,v),连边<u+n,v,INF>,<v+n,u,INF>。然后对于每对顶点(i,j)跑最大流(i+n,j)。所有最大流的最小值即为答案。
struct node
{
int v,cap,next;
};
node edges[N*10];
int head[N],e;
int curedge[N],h[N],num[N],pre[N];
int s,t;
void add(int u,int v,int cap)
{
edges[e].v=v;
edges[e].cap=cap;
edges[e].next=head[u];
head[u]=e++;
}
void Add(int u,int v,int cap)
{
add(u,v,cap);
add(v,u,0);
}
int Maxflow(int s,int t,int n)
{
clr(h,0); clr(num,0);
int i;
FOR0(i,n+1) curedge[i]=head[i];
int u=s,Min,k,x,ans=0;
while(h[u]<n)
{
if(u==t)
{
Min=INF*100;
for(i=s;i!=t;i=edges[curedge[i]].v)
{
x=curedge[i];
if(edges[x].cap<Min)
{
Min=edges[x].cap;
k=i;
}
}
ans+=Min; u=k;
for(i=s;i!=t;i=edges[curedge[i]].v)
{
x=curedge[i];
edges[x].cap-=Min;
edges[x^1].cap+=Min;
}
}
for(i=curedge[u];i!=-1;i=edges[i].next)
{
if(edges[i].cap>0&&h[u]==h[edges[i].v]+1)
{
break;
}
}
if(i!=-1)
{
curedge[u]=i;
pre[edges[i].v]=u;
u=edges[i].v;
}
else
{
if(--num[h[u]]==0) break;
curedge[u]=head[u];
x=n;
for(i=head[u];i!=-1;i=edges[i].next)
{
k=edges[i].v;
if(edges[i].cap>0&&h[k]<x) x=h[k];
}
h[u]=x+1; num[x+1]++;
if(u!=s) u=pre[u];
}
}
return ans;
}
int n,m;
int a[55][55];
int visit[55];
void DFS(int u)
{
visit[u]=1;
int i,v;
FOR1(i,n) if(a[u][i]&&!visit[i])
{
DFS(i);
}
}
int ok()
{
clr(visit,0);
DFS(1);
int i;
FOR1(i,n) if(!visit[i]) return 0;
return 1;
}
int cal(int s,int t)
{
clr(head,-1); e=0;
int i,j;
FOR1(i,n) Add(i,i+n,1);
FOR1(i,n) for(j=1;j<=n;j++) if(a[i][j])
{
Add(i+n,j,INF);
}
return Maxflow(s+n,t,n+n+2);
}
int get()
{
int x=0;
char c=getchar();
while(!isdigit(c))c=getchar();
while(isdigit(c))
{
x=x*10+c-'0';
c=getchar();
}
return x;
}
int main()
{
while(scanf("%d%d",&n,&m)!=-1)
{
if(m==0)
{
if(n==0) puts("0");
else if(n==1) puts("1");
else puts("0");
continue;
}
clr(a,0);
int u,v,i;
FOR0(i,m)
{
u=get(); v=get();
a[u+1][v+1]=a[v+1][u+1]=1;
}
if(!ok())
{
puts("0");
continue;
}
int j;
int ans=INF;
FOR1(i,n) for(j=1;j<=n;j++) if(i!=j)
{
int x=cal(i,j);
ans=min(ans,x);
}
if(ans==INF||ans==n-1) ans=n;
PR(ans);
}
}
ZOJ 2182 Cable TV Network(无向图点割-最大流)的更多相关文章
- POJ 1966 ZOJ 2182 Cable TV Network
无向图顶点连通度的求解,即最少删除多少个点使无向图不连通. 我校“荣誉”出品的<图论算法理论.实现及其应用>这本书上写的有错误,请不要看了,正确的是这样的: 对于每个顶点,分成两个点,v和 ...
- poj1966Cable TV Network——无向图最小割(最大流)
题目:http://poj.org/problem?id=1966 把一个点拆成入点和出点,之间连一条边权为1的边,跑最大流即最小割: 原始的边权赋成inf防割: 枚举源点和汇点,直接相邻的两个点不必 ...
- Cable TV Network 顶点连通度 (最大流算法)
Cable TV Network 题目抽象:给出含有n个点顶点的无向图,给出m条边.求定点联通度 K 算法:将每个顶点v拆成 v' v'' ,v'-->v''的容量为1. ...
- POJ 1966 Cable TV Network (无向图点连通度)
[题意]给出一个由n个点,m条边组成的无向图.求最少去掉多少点才能使得图中存在两点,它们之间不连通. [思路]回想一下s->t的最小点割,就是去掉多少个点能使得s.t不连通.那么求点连通度就枚举 ...
- UVA-1660 Cable TV Network (最小割)
题目大意:给一张n个点.m条边的无向图,求最小点割集的基数. 题目分析:求无向图最小点割集的基数可以变成求最小割.考虑单源s单汇t的无向图,如果要求一个最小点集,使得去掉这个点集后图不再连通(连通分量 ...
- POJ 1966 Cable TV Network (最大流最小割)
$ POJ~1966~Cable~TV~Network $ $ solution: $ 第一眼可能让人很难下手,但本就是冲着网络流来的,所以我们直接一点.这道题我们要让这个联通图断开,那么势必会有两个 ...
- POJ 1966 Cable TV Network(顶点连通度的求解)
Cable TV Network Time Limit: 1000MS Memory Limit: 30000K Total Submissi ...
- 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 Submissions: 4702 Accepted: 2173 ...
随机推荐
- 为centos添加额外的源
使用这个命令: yum install epel-release
- zw版【转发·台湾nvp系列Delphi例程】HALCON Component Histogram
zw版[转发·台湾nvp系列Delphi例程]HALCON Component Histogram unit Unit1;interfaceuses Windows, Messages, SysUti ...
- html5,表格
<table border="1"><caption>表格的实例</caption><tr><td>单元格</td ...
- [sinatra] Sinatra再入门
原文URL:http://www.rubycc.com/bbs/topic_detail/86 1.基础代码app.rb require 'rubygems' require 'sinatra/bas ...
- PHP生成二维码【谷歌API+qrcode+圆角Logo】
方法一:谷歌二维码API 接口地址:https://chart.googleapis.com/chart 官方文档:https://developers.google.com/chart/infogr ...
- Android侧滑
人人客户端有一个特效还是挺吸引人的,在主界面手指向右滑动,就可以将菜单展示出来,而主界面会被隐藏大部分,但是仍有左侧的一小部分同菜单一起展示. 据说人人客户端的这个特效是从facebook客户端模仿来 ...
- 执行maven-build.cmd失败
执行maven-build.cmd失败,显示:"Non-resolvable parent POM: Could not transfer artifact ......",如截图 ...
- 杭电1020-Encoding
Problem Description Given a string containing only 'A' - 'Z', we could encode it using the following ...
- jar的下载地址及其使用说明
有时候会苦于jar的搜索.这里我就给出我平时用到的吧,方便大家.后期会不断添加. 1.dom4j-1.6.1.jar 主要用于解析xml的jar包.下载地址: http://pan.baidu.c ...
- Django的第一个web程序及深入学习
本学习历程参照Practical Django Projects和http://djangobook.py3k.cn上翻译的内容进行 注:本例以本机加以说明: 根据Django的安装过程可知:在命令行 ...