POJ 1966
求的是无向图的点连通度。开始便想到网络流,既然选的是点,当然就要拆点加边了。但无论如何也不敢往枚举源汇点的方向想,因为网络流复习度很高。看看网上大牛的,都是枚举,再看数据,原来N才50个点,枚举无压力啊。看来自己以后要注意分析一下复杂度了。
总结:
1)无向图点连通度
看来没有什么好的算法。网络流。把点i拆成i->i‘容量自然是1,把无向图的边也拆成两条有向边i'->j,j'->i,容量为无穷。然后,枚举求s'->t的最小割就可了。
2)有向图点连通度
这个更简单了,单纯拆点建图就可以了。
3)无向图边连通度。
可以用store-wanger求最小割。边权为1
4)有向图边连通度
就是网络流求最小割
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std; const int INF=0x3f3f3f3;
const int MAXN= ;
const int MAXM=; struct Node{
int from,to,next;
int cap;
}edge[MAXM];
int tol; int dep[MAXN];
int head[MAXN];
bool maze[MAXN][MAXN];
int n,m;
void init(){
tol=;
memset(head,-,sizeof(head));
}
void addedge(int u,int v,int w){
edge[tol].from=u;
edge[tol].to=v; edge[tol].cap=w; edge[tol].next=head[u];
head[u]=tol++;
edge[tol].from=v;
edge[tol].to=u;
edge[tol].cap=;
edge[tol].next=head[v];
head[v]=tol++;
} int BFS(int start,int end){
int que[MAXN];
int front,rear; front=rear=;
memset(dep,-,sizeof(dep));
que[rear++]=start;
dep[start]=;
while(front!=rear){
int u=que[front++];
if(front==MAXN)front=;
for(int i= head[u];i!=-; i=edge[i].next){
int v=edge[i].to;
if(edge[i].cap>&& dep[v]==-){
dep[v]=dep[u]+;
que[rear++]=v;
if(rear>=MAXN) rear=;
if(v==end)return ;
}
}
}
return ;
}
int dinic(int start,int end){
int res=;
int top;
int stack[MAXN];
int cur[MAXN];
while(BFS(start,end)){
memcpy(cur,head, sizeof(head));
int u=start;
top=;
while(){
if(u==end){
int min=INF;
int loc;
for(int i=;i<top;i++)
if(min>edge [stack[i]].cap) {
min=edge [stack[i]].cap;
loc=i;
}
for(int i=;i<top;i++){
edge[stack[i]].cap-=min;
edge[stack[i]^].cap+=min;
}
res+=min;
top=loc;
u=edge[stack[top]].from;
}
for(int i=cur[u]; i!=-; cur[u]=i=edge[i].next)
if(edge[i].cap!= && dep[u]+==dep[edge[i].to])
break;
if(cur[u] !=-){
stack [top++]= cur[u];
u=edge[cur[u]].to;
}
else{
if(top==) break;
dep[u]=-;
u= edge[stack [--top] ].from;
}
}
}
return res;
} void build(){
init();
for(int i=;i<n;i++){
for(int j=;j<n;j++){
if(i==j)
addedge(i*,i*+,);
else if(maze[i][j]){
addedge(i*+,j*,INF);
}
}
} } int main(){
int u,v;
while(scanf("%d%d",&n,&m)!=EOF){
memset(maze,false,sizeof(maze));
for(int i=;i<m;i++){
scanf(" (%d,%d)",&u,&v);
maze[u][v]=maze[v][u]=true;
}
int ans=INF;
for(int i=;i<n;i++){
for(int j=i+;j<n;j++){
build();
if(!maze[i][j]){
int res=dinic(i*+,j*);
if(res<ans) ans=res;
if(ans==) break;
}
}
if(ans==) break;
}
if(ans>=n){ printf("%d\n",n); continue; }
printf("%d\n",ans);
}
return ;
}
POJ 1966的更多相关文章
- poj 1966(求点连通度,边连通度的一类方法)
题目链接:http://poj.org/problem?id=1966 思路:从网上找了一下大牛对于这类问题的总结:图的连通度问题是指:在图中删去部分元素(点或边),使得图中指定的两个点s和t不连通 ...
- POJ 1966:Cable TV Network(最小点割集)***
http://poj.org/problem?id=1966 题意:给出一个由n个点,m条边组成的无向图.求最少去掉多少点才能使得图中存在两点,它们之间不连通. 思路:将点i拆成a和b,连一条a-&g ...
- POJ 1966 Cable TV Network
Cable TV Network Time Limit: 1000MS Memory Limit: 30000K Total Submissions: 4702 Accepted: 2173 ...
- uva 1660 & poj 1966(点连通度)
Cable TV Network Time Limit: 1000MS Memory Limit: 30000K Total Submissions: 4267 Accepted: 2003 ...
- POJ 1966 Cable TV Network(顶点连通度的求解)
Cable TV Network Time Limit: 1000MS Memory Limit: 30000K Total Submissi ...
- POJ 1966 Cable TV Network (无向图点连通度)
[题意]给出一个由n个点,m条边组成的无向图.求最少去掉多少点才能使得图中存在两点,它们之间不连通. [思路]回想一下s->t的最小点割,就是去掉多少个点能使得s.t不连通.那么求点连通度就枚举 ...
- poj 1966 Cable TV Network 顶点连通度
题目链接 给一个图, n个点m条边, 求至少去掉多少个点可以使得图不再联通.随便指定一个点为源点, 枚举其他点为汇点的情况, 跑网络流, 求其中最小的情况. 如果最后ans为inf, 说明是一个完全图 ...
- POJ 1966 ZOJ 2182 Cable TV Network
无向图顶点连通度的求解,即最少删除多少个点使无向图不连通. 我校“荣誉”出品的<图论算法理论.实现及其应用>这本书上写的有错误,请不要看了,正确的是这样的: 对于每个顶点,分成两个点,v和 ...
- POJ 1966 Cable TV Network (点连通度)【最小割】
<题目链接> 题目大意: 给定一个无向图,求点连通度,即最少去掉多少个点使得图不连通. 解题分析: 解决点连通度和边连通度的一类方法总结见 >>> 本题是求点连通度, ...
- POJ 1966 Cable TV Network (算竞进阶习题)
拆点+网络流 拆点建图应该是很常见的套路了..一张无向图不联通,那么肯定有两个点不联通,但是我们不知道这两个点是什么. 所以我们枚举所有点,并把每个点拆成入点和出点,每次把枚举的两个点的入点作为s和t ...
随机推荐
- bzoj 2152 聪聪可可(点分治模板)
2152: 聪聪可可 Time Limit: 3 Sec Memory Limit: 259 MBSubmit: 3194 Solved: 1647[Submit][Status][Discuss ...
- Django day08 多表操作 (五) 聚合,分组查询 和 F,Q查询
一:聚合,分组查询 二:F, Q查询
- 后台传list,前台接受
@RequestMapping("/page1") public ModelAndView editSharing(Integer id) { ModelAndView mav=n ...
- iOS 点击事件传递及响应
1.iOS中的事件 iOS中的事件可以分为3大类型: 触摸事件 加速计事件 远程控制事件这里我们只讨论iOS中的触摸事件. 1.1响应者对象(UIResponder) 在iOS中不是任何对象都能处理事 ...
- org.apache.catalina.core.StandardContext startInternal SEVERE: Error listenerStart
问题:文件明明存在,资源找不到,报错 解决方法:原因是没有build path,这有点像.net里边的build .点击相应的文件夹选择build path ,解决问题
- ScreenRecord(about C# winform)
由于一些不得不做的事(哈,有时间再聊),所以就不得不写一个关于录屏的软件了,如此无力的开篇,开始吧. 在网上搜了很多关于录屏的源码,发现都使不了,剧情的需要很难满足.于是突然想到了github上的一个 ...
- SSIS 无法在 unicode 和非 unicode 字符串数据类型之间转换
最近在学SSIS,遇到一个问题,把平面文件源的数据导入到EXCEL中. 平面文件源的对象是CSV,读进来的PhoneNumber是 DT_STR 然后倒入Excel 对应列建立的是longtext 一 ...
- crontab与系统时间不一致
将线上数据库迁移至虚拟机后,运维没有把时间修改. 在后期把时间修改完成后,在数据库上也要修改修改,但是定时任务的备份时间却不在凌晨4点执行,而是在中午12:10分执行. 原因是修改时间后,需要重启cr ...
- mysql 5.6 中 explicit_defaults_for_timestamp参数
mysql 5.6 中 explicit_defaults_for_timestamp参数 一: 官方文档中关于explicit_defaults_for_timestamp参数说明如下: expli ...
- 【sqli-labs】 less21 Cookie Injection- Error Based- complex - string ( 基于错误的复杂的字符型Cookie注入)
这个和less20是一样的,唯一的不同在于添加了括号和使用了base64对cookie进行了编码(因为使用了base64_decode解码函数) admin被编码成了YWRtaW4=但是执行的SQL语 ...