hdu 4587 2013南京邀请赛B题/ / 求割点后连通分量数变形。
题意:求一个无向图的,去掉两个不同的点后最多有几个连通分量。
思路:枚举每个点,假设去掉该点,然后对图求割点后连通分量数,更新最大的即可。算法相对简单,但是注意几个细节:
1:原图可能不连通。
2:有的连通分量只有一个点,当舍去该点时候,连通分量-1;
复习求割点的好题!
#include<iostream>
#include<cstdio>
#include<vector>
using namespace std;
int n,m;
vector<vector<int> >e(10010);
int dfn[5010];int low[5010];int vis[5010];
int times=0;
int subset[5010];
int root=0;
int rf=0;
int son=0;
void tarjan(int u,int fa) //无向图tarjan记录父亲
{if(u==rf)return; //是被枚举的点,舍去(从图中删去)。dfn[u]=low[u]=times++;for(int i=0;i<e[u].size();i++){int v=e[u][i];if(v==rf)continue; // 这里注意,舍去的点不要了if(!vis[v]){vis[v]=1;tarjan(v,u);if(low[v]<low[u])low[u]=low[v];if(u==root) //求割点是根的情况{son++;}else // 其他情况{if(dfn[u]<=low[v]) //subset【u】+1记录 以u为割点后形成的连通分量数subset[u]++;}}else if(v!=fa) //条件注意{if(dfn[v]<low[u])low[u]=dfn[v];}}return ;
}
int main()
{while(~scanf("%d%d",&n,&m)){for(int i=0;i<=n;i++){dfn[i]=low[i]=subset[i]=vis[i]=0;e[i].clear();}int ta,tb;for(int i=0;i<m;i++){scanf("%d%d",&ta,&tb);e[ta].push_back(tb);e[tb].push_back(ta);}int maxx=0;for(int i=0;i<n;i++) //枚举每个点{rf=i; //i舍去vis[rf]=1;int scc=0;int maxson=0;for(int iii=0;iii<n;iii++) //考虑原图不连通!{if(!vis[iii]){vis[iii]=1;root=iii;tarjan(iii,-1);scc++; //连通分量数if(son>maxson)maxson=son; //求出每个连通分量的根的最大的sonson=0; //每个连通分量要更新son}}if(e[i].size()==0)scc--; // 注意点!!!:该连通分量只有一个点!舍去的话就没了。for(int ii=0;ii<n;ii++) //取最大的{if(scc+subset[ii]+1-1>maxx)maxx=scc+subset[ii]+1-1;}if(scc+maxson-1>maxx)maxx=maxson+scc-1; for(int j=0;j<n;j++) //不忘更新!{dfn[j]=low[j]=subset[j]=vis[j]=0;}son=times=0;}cout<<maxx<<endl;}return 0;
}
转载于:https://www.cnblogs.com/yezekun/p/3925714.html
hdu 4587 2013南京邀请赛B题/ / 求割点后连通分量数变形。相关推荐
- 对tf.reduce_mean API的理解就是求平均值,reduce指的是一串数据求平均值后维数降低了,可不是吗,一串向量变成了一个数,维数自然降低了
tf.math.reduce_mean(input_tensor, axis=None, keepdims=False, name=None ) 对tf.reduce_mean的理解就是求平均值,re ...
- 求数组排序后相邻数的最大差值
/** * 求数组排序后相邻数的最大差值 * @author Administrator * {9,3,1,10} 返回6 */ public class test12 { public static ...
- 牛客-计算机复试题-求图的连通分支数
求图的连通分支数可以用并查集实现. 并查集的讲解推荐: https://blog.csdn.net/liujian20150808/article/details/50848646 本题求的是无向图的 ...
- 2013 南京邀请赛 A play the dice 求概率
1 /** 2 大意:给定一个色子,有n个面,每一个面上有一个数字,在其中的m个面上有特殊的颜色,当掷出的色子出现这m个颜色之一时,可以再掷一次..求其最后的期望 3 思路:假设 期望为ans 4 a ...
- hdu 4588 Count The Carries 南京邀请赛
题目意思:求a~b 之间数二进制的和 求 进了多少位. 比如 1-3 01+10+11=22 22->30->110 进了 2位 要寻找规律,发现 加到3的时候为22 ...
- 南京晓庄学院大一第二学期计算机数据结构期末考试试卷及答案,南京晓庄学院数据结构题库参考标准答案...
南京晓庄学院数据结构题库参考标准答案 数据结构与算法 习题册 (课后部分参考答案) <数据结构与算法>课程组 目录 课后习题部分 第一章 绪论1 第二章 线性表3 第三章 栈和队列5 第四 ...
- zz 标 题: 求weka JVM outofMemory问题的解决方案【已解决】
发信人: finallyliuyu (领头驴), 信区: NLP 标 题: 求weka JVM outofMemory问题的解决方案 发信站: 水木社区 (Sun Feb 20 10:36:12 2 ...
- 第十一届蓝桥杯省赛C++组试题 第3题 求阴影面积
/* 第十一届蓝桥杯省赛C++组试题 第3题 求阴影面积 */ #include <bits/stdc++.h> using namespace std; int main() {int ...
- 第十一届蓝桥杯省赛 C++组试题 第2题 求完数
/* 第十一届蓝桥杯省赛C++组试题精讲第2题 求完数因子:因子也叫因数,例如3×5=15,那么3和5是15的因子. 同时15×1=15,那么1和15也是15的因子. 1,3,5,15 这四个因子是1 ...
最新文章
- 面向对象程序设计作业 6.1~6.4
- PHP把下划线分隔命名的字符串 转换成驼峰式命名方式
- 华为的发展与管理浅析
- vim + cscope + kscope
- iOS开发常用的第三方
- guava的正确引入方式_使用Guava的AbstractInvocationHandler正确完成代理
- Springboot2.x +JPA 集成 Apache ShardingSphere 分库分表
- linux系统调用函数printf,使用AT&T语法将整数打印为字符串,并使用Linux系统调用而不是printf...
- plsql 存储过程 批量提交_新一代的键值存储 KVell SOSP 2019
- jquery.validate动态更改校验规则
- 记录一次ORA-01034: ORACLE not available ORA-27101: shared memory realm does not exis故障【已解决】
- Ubuntu c++调用python脚本(Anaconda)
- 蚂蚁金服 Java RPC 开源框架—SOFARPC
- Lambda表达式----“进化论”
- 辩证唯物主义和历史唯物主义思维导图 - 圣才
- 电脑主板资料库 07【转至www.ongood.com.tw】【FreeXploiT收集整理】
- 黄页宝贝工具栏软件发布了
- 菲尔人格测试(测试一下自己的分数看看)
- 一系列国内外顶尖互联网公司的技术博客,晋升程序员必备!
- C语言实现估计信号的幅度