poj Transferring Sylla(怎样高速的推断一个图是否是3—连通图,求割点,割边)
Transferring Sylla
首先。什么是k连通图?
k连通图就是指至少去掉k个点使之不连通的图。
题目:
题目描写叙述的非常裸。就是给你一张图要求你推断这图是否是3-连通图。
算法分析:
/////////////////////////////////////////////////////////////////////
(网上别人的分析,分析的非常好所以直接引用了)
考虑一下不可行的情况。就是存在两点间的路径条数<3情况,那么我们能够去枚举两个点a和b,然后将其和相邻的边删除。然后推断联通块个数,假设块数大于1则存在路径条数<3的情况,否则不存在,由于假设a和b是一个路径条数<3的点对的路径上的点。假设将其破坏了,这两个点必定不会再联通。由于不可行的情况路径条数最多为2,因此仅仅须要枚举两个点。
/////////////////////////////////////////////////////////////////////////
可是这肯定超时。
所以。我们还要优化。我们能够想到既然枚举两个点会超时。那么如今我仅仅枚举一个点呢?当然是能够的。
可是,为什么能够仅仅枚举一个点呢?由于,我们从割点的定义能够知道当一个图是强连通图时候,那么他一定没有割点。
所以。当我们枚举到了删除点的时候。那么在剩下的图中假设存在割点那个这个图一定不是3-连通图。由于。此时我们仅仅要删除两条边就能够使其不连通了。
给出求解割点割边的模板,这题仅仅要一套模板就能够了。
///////////// DATA /////////////////////
vector<int> G[MAXN];
int V,E;
bool cut[MAXN]; // 是否是割点
int color[MAXN]; //0:没有訪问 1:正在訪问 2:已经訪问
int lowc[MAXN]; //表示i及i的子孙相连的辈分最高的祖先节点所在的深度
int d[MAXN]; //表示i节点在树中的深度
int root; //根节点
int fath; //父节点
int pcnt; //割点个数
int egcnt; //割边个数
bool flag; //是否存在割点 ///////////// DATE END //////////////////////// //初始化
void init(){
flag = false;
for(int i = 0;i <= V;++i)
G[i].clear();
} ///////////////// Tarjan ////////////////////// void dfs(int u,int fa,int deep){
color[u] = 1; //正在訪问
lowc[u] = d[u] = deep; // 深度
int tot = 0; //子树个数
int i,v;
for(i = 0;i < (int)G[u].size();++i){
v = G[u][i];
if(v != fa&&color[v] == 1){
lowc[u] = min(lowc[u],d[v]);
}
if(0 == color[v]){
dfs(v,u,deep + 1);
tot++; //子树 +1
lowc[u] = min(lowc[u],lowc[v]);
//求割点
if((u == root&&tot > 1)||(u != root&&lowc[v] >= d[u])){
cut[u] = 1; //不能将pcnt++写到这里
flag = true;
} /* //求割边 u - > v是割边
if(lowc[v] > d[u]){
edge[u][v] = true;
} */
}
}
color[u] = 2;
} //////////// END Tarjan /////////////// void calc(int del){
pcnt = egcnt = 0;
memset(cut,0,sizeof(cut));
memset(color,0,sizeof(color));
memset(lowc,0,sizeof(lowc));
memset(d,0,sizeof(d)); color[del] = 2;
root = 0;
if(del == 0)
root = 1;
dfs(root,-1,1); /* //统计割点个数
for(int i = 0;i < V;++i)
if(cut[i]) pcnt++; */
}
//求图是否是三连通
void solve(){ for(int i = 0;i < V;++i){
calc(i); //推断图是否连通
for(int j = 0;j < V;++j){
if(0 == color[j]){
flag = true;
break;
}
} if(flag) break;
}
}
poj Transferring Sylla(怎样高速的推断一个图是否是3—连通图,求割点,割边)的更多相关文章
- POJ - 3249 Test for Job (在DAG图利用拓扑排序中求最长路)
(点击此处查看原题) 题意 给出一个有n个结点,m条边的DAG图,每个点都有权值,每条路径(注意不是边)的权值为其经过的结点的权值之和,每条路径总是从入度为0的点开始,直至出度为0的点,问所有路径中权 ...
- POJ 3713 Transferring Sylla (三连通图)
[题目链接] http://poj.org/problem?id=3713 [题目大意] 给出一个图判断是不是三连通图,三连通图的意思是对于图中任意两点, 至少有三条路是可以相互连通的. [题解] 我 ...
- [ACM] POJ 3259 Wormholes (bellman-ford最短路径,推断是否存在负权回路)
Wormholes Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 29971 Accepted: 10844 Descr ...
- POJ 3713 Transferring Sylla (三联通分量)
Transferring Sylla Time Limit: 5000MS Memory Limit: 65536K Total Submissions: 3533 Accepted: 988 ...
- 如何推断一个P2P平台是否靠谱?
推断一个站点,是否靠谱.是有规律可循的.P2P平台算是个新兴的电商类站点. 网上欺诈类的站点.不限于P2P,实在是太多了,真的有必要总结下最关键的几个靠谱指标. 最关键的2个 1.创始人和 ...
- HDU 2454 Degree Sequence of Graph G(Havel定理 推断一个简单图的存在)
主题链接:pid=2454">http://acm.hdu.edu.cn/showproblem.php?pid=2454 Problem Description Wang Haiya ...
- POJ 1144 Network(无向图连通分量求割点)
题目地址:id=1144">POJ 1144 求割点.推断一个点是否是割点有两种推断情况: 假设u为割点,当且仅当满足以下的1条 1.假设u为树根,那么u必须有多于1棵子树 2.假设u ...
- POJ 1144 Network(Tarjan求割点)
Network Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 12707 Accepted: 5835 Descript ...
- poj 1144 (Tarjan求割点数量)
题目链接:http://poj.org/problem?id=1144 描述 一个电话线公司(简称TLC)正在建立一个新的电话线缆网络.他们连接了若干个地点分别从1到N编号.没有两个地点有相同的号码. ...
随机推荐
- jni传递对象中包含arraylist对象。
相信在使用jni的过程中,总是要传递各种各样的类型,在这其中,我也碰到了一些问题. 简单的传一些内容,相信在网上一搜一大把. 所以我们就来说说.传递对象中包含arraylist吧. 在这里先给大家一个 ...
- BZOJ 3123 主席树 启发式合并
思路: 主席树 搞树上的k大 x+y-lca(x,y)-fa(lca(x,y)) 按照size小树往大树上插 启发式合并 n*log^2n的 搞定~ //By SiriusRen #include & ...
- 基于分布式的短文本命题实体识别之----人名识别(python实现)
目前对中文分词精度影响最大的主要是两方面:未登录词的识别和歧义切分. 据统计:未登录词中中文姓人名在文本中一般只占2%左右,但这其中高达50%以上的人名会产生切分错误.在所有的分词错误中,与人名有关的 ...
- angular route 与 django urls 冲突怎么解决?
app.js var app = angular.module('app', [ 'ngResource', 'ngRoute', // 'ui.bootstrap', // 'ngResource' ...
- PostgreSQL Replication之第二章 理解PostgreSQL的事务日志(2)
2.2 XLOG和复制 在本章中,您已经了解到PostgreSQL的事务日志已经对数据库做了所有的更改.事务日志本身被打包为易用的16MB段. 使用这种更改集来复制数据的想法是不牵强的.事实上,这是在 ...
- POJ 3567 Cactus Reloaded(仙人掌直径)
题意 裸的仙人掌直径. 题解 先考虑基环树的直径:先算出每颗“树”的直径,再在环上跑DP 再考虑仙人掌的直径:把每个基环树缩成一条边,边长为基环树深度. #include<iostream> ...
- [USACO07MAR]每月的费用Monthly Expense
题目:POJ3273.洛谷P2884. 题目大意:有n个数,要分成m份,每份的和要尽可能小,求这个情况下和最大的一份的和. 解题思路:二分答案,对每个答案进行贪心判断,如果最后得出份数>m,则说 ...
- python常用函数库收集。
学习过Python都知道python中有很多库.python本身就是万能胶水,众多强大的库/模块正是它的优势. 收集一些Python常用的函数库,方便大家选择要学习的库,也方便自己学习收集,熟悉运用好 ...
- 搭建Lvs负载均衡群集
一.Lvs详解 lvs内核模型 1.模型分析 用户访问的数据可以进入调度器 匹配调度器分配的虚拟IP|IP+端口(路由走向) 根据调度器的算法确定匹配的服务器 2.调度条件:基于IP.基于端口.基于内 ...
- Centos7:yum安装apache,编译安装php5.6,不解析php的解决方法
首先,说一下问题发生的场景: 因为懒,所以用 yum 安装 apache ,因为 centos 的源自带 php 5.4 不能符合环境要求,而不想用其他源,所以选择源码编译安装 php 5.6 安装完 ...