求割点模板(可求出割点数目及每个割点分割几个区域)POJ1966(Cable TV Network)
题目链接:传送门
题目大意:给你一副无向图,求解图的顶点连通度
题目思路:模板(图论算法理论,实现及应用 P396)
Menger定理:无向图G的顶点连通度k(G)和顶点间最大独立轨数目之间存在如下关系:
1.若G是完全图,k(G)=|V(G)|-1
2.若G不是完全图,k(G)=min{P(A,B)} 其中A,B不直接相连
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cmath>
#include <algorithm>
#include <cstring>
#include <stack>
#include <cctype>
#include <queue>
#include <string>
#include <vector>
#include <set>
#include <map>
#include <climits>
#define lson root<<1,l,mid
#define rson root<<1|1,mid+1,r
#define fi first
#define se second
#define ping(x,y) ((x-y)*(x-y))
#define mst(x,y) memset(x,y,sizeof(x))
#define mcp(x,y) memcpy(x,y,sizeof(y))
#define Min(x,y) (x<y?x:y)
#define Max(x,y) (x>y?x:y)
using namespace std;
#define gamma 0.5772156649015328606065120
#define MOD 1000000007
#define inf 0x3f3f3f3f
#define N 10005
#define maxn 1000050
typedef long long LL;
typedef pair<int,int> PII; int n,m;
int lel[],head[];
struct Node{
int to,next,v;
Node(){}
Node(int a,int b,int c):to(a),next(b),v(c){}
}node[N];int hcnt; inline void init(){
hcnt=;
mst(head,-);
}
int bfs(int s,int t){
int i;
queue<int>q;
mst(lel,-);
lel[s]=;
q.push(s);
while(!q.empty()){
int x=q.front();q.pop();
if(x==t)return ;
for(i=head[x];~i;i=node[i].next){
int e=node[i].to;
if(lel[e]==-&&node[i].v){
lel[e]=lel[x]+;
q.push(e);
}
}
}
return ;
} inline void init_flow(){
for(int i=;i<hcnt;i+=){
node[i].v+=node[i^].v;
node[i^].v=;
}
} int dfs(int s,int t,int v){
if(s==t) return v;
int flow=;
for(int i=head[s];~i;i=node[i].next){
int e=node[i].to,f=node[i].v;
if(lel[e]==lel[s]+&&f){
int al=Min(v-flow,f);
al=dfs(e,t,al);
node[i].v-=al;
node[i^].v+=al;
flow+=al;
if(flow==v)return flow;
}
}
return flow;
} int Dinic(int s,int t){
int res=;
while(bfs(s,t))res+=dfs(s,t,inf);
return res;
} inline void add(int x,int y,int v){
node[hcnt]=Node(y,head[x],v);
head[x]=hcnt++;
node[hcnt]=Node(x,head[y],);
head[y]=hcnt++;
} int main(){
int i,j,group,Case=,x,y;
while(scanf("%d%d",&n,&m)!=EOF){
init();
for(i=;i<n;++i)add(i,i+n,);
while(m--){
scanf(" (%d,%d)",&x,&y);
add(x+n,y,inf);
add(y+n,x,inf);
}
int ans=inf;
for(i=;i<n;++i){
ans=min(ans,Dinic(+n,i));
init_flow();
}
if(ans==inf)ans=n;
printf("%d\n",ans);
}
return ;
}
求割点模板(可求出割点数目及每个割点分割几个区域)POJ1966(Cable TV Network)的更多相关文章
- POJ - 1966 Cable TV Network (最大流求点连通度)
题意:求一个无向图的点连通度.点联通度是指,一张图最少删掉几个点使该图不连通:若本身是非连通图,则点连通度为0. 分析:无向图的点连通度可以转化为最大流解决.方法是:1.任意选择一个点作为源点:2.枚 ...
- Tarjan求强连通分量、求桥和割点模板
Tarjan 求强连通分量模板.参考博客 #include<stdio.h> #include<stack> #include<algorithm> using n ...
- [poj1144]Network(求割点模板)
解题关键:割点模板题. #include<cstdio> #include<cstring> #include<vector> #include<stack& ...
- HDU4738 tarjan割边|割边、割点模板
题目:http://acm.hdu.edu.cn/showproblem.php?pid=4738 坑点: 处理重边 图可能不连通,要输出0 若求出的结果是0,则要输出1,因为最少要派一个人 #inc ...
- 求中位数为K的区间的数目
给定一个长为 $n$ 的序列和常数 $k$,求此序列的中位数为 $k$ 的区间的数量.一个长为 $m$ 的序列的中位数定义为将此序列从小到大排序后第 $\lceil m / 2 \rceil$ 个数. ...
- 字符串_KMP算法(求next[]模板 hdu 1711)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1711 问题描述:给两个序列a,b,长度分别为n,m(1<=n<=1000000,1< ...
- LCS模板,求长度,并记录子串
//LCS模板,求长度,并记录子串 //亦可使用注释掉的那些代码,但所用空间会变大 #include<iostream> #include<cstring> #include ...
- 倍增求lca模板
倍增求lca模板 https://www.luogu.org/problem/show?pid=3379 #include<cstdio> #include<iostream> ...
- 求最小正整数x,A^x=1(mod M)求阶模板
整数的阶:设a和n是互素的正整数,使得a^x=1(mod n)成立的最小的正整数x称为a模n的阶 //求阶模板:A^x=1(mod M),调用GetJie(A,M) //输入:10^10>A,M ...
随机推荐
- Github:在Github上创建自己的代码仓库
Github是一个分布式版本控制系统,最初由Linux之父Linus Torvalds编写,在云时代的今天已经成为了开发者管理代码和发现已有代码的最常用工具之一,下面我们将开始git之旅. 注册Git ...
- lodash _.size
返回collection(集合)的长度,如果集合是类数组或字符串,返回其 length :如果集合是对象,返回其可枚举属性的个数. _.size([1, 2, 3]); // => 3 _.si ...
- lodash capitalize 首字母大写
_.capitalize([string='']) 转换字符串首字母为大写,剩下为小写. _.capitalize('FRED'); // => 'Fred'
- rsync问题-connection refused(111)、Unknown module
1.Connection refused (111) 启动服务:rsync --daemon --config=/etc/rsyncd.conf 2.@ERROR: Unknown module 's ...
- ERROR: ld.so: object '/usr/lib64/libtcmalloc.so.4' from LD_PRELOAD cannot be preloaded: ignored
出现错误: ERROR: ld.so: object '/usr/lib64/libtcmalloc.so.4' from LD_PRELOAD cannot be preloaded: ignore ...
- mysql cmd连接 乱码
cmd 默认编码方式是gbk,而我的mysql 设置的编码方式是utf-8的:因此在cmd 中执行 mysql> set names gbk;再查询,发现cmd 中乱码问题得到了解决.
- 云解析DNS使用教程
云解析(Domain. Name System,简称DNS)是一种高可用性.高可扩展的权威DNS服务和DNS管理服务.它的目的是为企业和开发者提供稳定.安全.智能的把网站域名或应用资源转换为计算机用于 ...
- Linux-进程内存占用情况
可以直接使用top命令后,查看%MEM的内容.可以选择按进程查看或者按用户查看,如想查看oracle用户的进程内存使用情况的话可以使用如下的命令: (1)top top命令是Linux下常用的性能分析 ...
- Windows外壳名字空间的浏览
Windows95/98对Dos/Win3.x作了许多重大改进,在文件系统方面,它除了采用长文件名替代Dos中的8.3文件名以外,引入外壳名字空间(Shell Name Space)来代Dos文件系统 ...
- Java线程安全同步容器
线程安全同步容器(使用 synchronized关键字) 1.ArrayList->Vector,Stack 2.HashMap->HashTable(key.value不能为null) ...