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编号.没有两个地点有相同的号码. ...
随机推荐
- Cms WebSite 编译非常慢
第一次编译非常慢 如果遇到错误,中途中断的话. 下一次编译的时候,上一次已经编译过的文件,会非常快的略过.很快就会到上一次遇到错误的地方,继续往下进行编译.
- 熟悉了下HTTP协议
HTML是一种用来定义网页的文本,会HTML,就可以编写网页: HTTP是在网络上传输HTML的协议,用于浏览器和服务器的通信.200表示一个成功的响应,后面的OK是说明.失败的响应有404 Not ...
- [Codeforces 757E] Bash Plays with Functions (数论)
题目链接: http://codeforces.com/contest/757/problem/E?csrf_token=f6c272cce871728ac1c239c34006ae90 题目: 题解 ...
- ajax无刷新翻页后,jquery失效问题的解决
例如 $(".entry-title a").click(function () { 只对第一页有效, 修改为 $(document).on('click', ".e ...
- 使用Java操作Redis(二)
上篇文章中我们可以看到,通过自己动手编码来操作Redis是相当繁琐的,实际上我们在重复制造轮子.Redis网站上列举出了一些方便操作Redis的常用工具. 可供Java选择的比较多,这里介绍一下Jed ...
- Svn中的tag标签的用法和意义
使用场景: 假如你的项目的某个版本已经完成测试开发.测试并已经上线,接下来街道新的需求,新项目开发需要修改多个文件的代码,当需求已经开发一段时间的时候,突然接到用户和测试人员的反馈,项目中某个重大的b ...
- 最大优先队列 A - 奇怪的玩意
我们的化学生物学家发明了一种新的叫stripies非常神奇的生命.该stripies是透明的无定形变形虫似的生物,生活在果冻状的营养培养基平板菌落.大部分的时间stripies在移动.当他们两个碰撞, ...
- 洛谷P2408 不同子串个数 后缀数组 + Height数组
## 题目描述: 给你一个长为 $N$ $(N<=10^5)$ 的字符串,求不同的子串的个数我们定义两个子串不同,当且仅当有这两个子串长度不一样 或者长度一样且有任意一位不一样.子串的定义:原字 ...
- 洛谷2474 [SCOI2008] 天平 差分约束->枚举
题目描述 你有n个砝码,均为1克,2克或者3克.你并不清楚每个砝码的重量,但你知道其中一些砝码重量的大小关系.你把其中两个砝码A 和B 放在天平的左边,需要另外选出两个砝码放在天平的右边.问:有多少种 ...
- Unity 性能优化(力荐)
开始之前先分享几款性能优化的插件: 1.SimpleLOD : 除了同样拥有Mesh Baker所具有的Mesh合并.Atlas烘焙等功能,它还能提供Mesh的简化,并对动态蒙皮网格进行了很好的支持. ...