题意:求一个无向图的,去掉两个不同的点后最多有几个连通分量。

思路:枚举每个点,假设去掉该点,然后对图求割点后连通分量数,更新最大的即可。算法相对简单,但是注意几个细节:

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; //求出每个连通分量的根的最大的son
son=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;
}

hdu 4587 2013南京邀请赛B题/ / 求割点后连通分量数变形。的更多相关文章

  1. 2013 南京邀请赛 K题 yet another end of the world

    /** 大意:给定一组x[],y[],z[] 确定有没有两个不同的x[i], x[j] 看是否存在一个ID使得 y[i]<=ID%x[i]<=z[i] y[j]<=ID%x[j]&l ...

  2. 【UVA10765】Doves and bombs (BCC求割点后联通块数量)

    题目: 题意: 给了一个联通无向图,现在问去掉某个点,会让图变成几个联通块? 输出的按分出的从多到小,若相等,输出标号从小到大.输出M个. 分析: BCC求割点后联通块数量,Tarjan算法. 联通块 ...

  3. 2013 ACM/ICPC南京邀请赛B题(求割点扩展)

    题目链接:http://icpc.njust.edu.cn/Contest/194/Problem/B B - TWO NODES 时间限制: 10000 MS 内存限制: 65535 KB 问题描述 ...

  4. 2013 南京邀请赛 A play the dice 求概率

    /** 大意:给定一个色子,有n个面,每一个面上有一个数字,在其中的m个面上有特殊的颜色,当掷出的色子出现这m个颜色之一时,可以再掷一次..求其最后的期望 思路:假设 期望为ans 4 ans = 1 ...

  5. hdu 4751 2013南京赛区网络赛 二分图判断 **

    和以前做过的一个二分图颇为相似,以前的是互相不认识的放在一组,这个是互相认识的,本质上是相同的 是 hdu 2444 #include<cstdio> #include<iostre ...

  6. HDU 4569Special equations2012长沙邀请赛E题(数学知识)

    Special equations Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others ...

  7. hdu 4753 2013南京赛区网络赛 记忆化搜索 ****

    看到范围基本可以想到dp了,处理起来有点麻烦 #include<iostream> #include<cstdio> #include<cstring> #incl ...

  8. 2013 南京邀请赛 C count the carries

    /** 大意: 给定区间(a,b), 将其转化为二进制 计算从a+(a+1)+(a+2)....+(a+b-1),一共有多少次进位 思路: 将(a,b)区间内的数,转化为二进制后,看其每一位一共有多少 ...

  9. (hdu step 6.3.1)Strategic Game(求用最少顶点数把全部边都覆盖,使用的是邻接表)

    题目: Strategic Game Time Limit: 20000/10000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others ...

随机推荐

  1. MFC:AfxLoadLibrary-将指定的 DLL 映射到调用进程的地址空间

    Visual Studio 2012 - Visual C++ LoadLibrary 和 AfxLoadLibrary 进程调用 LoadLibrary (或 AfxLoadLibrary) 以显式 ...

  2. python之set (集合)

    1. 集合是什么 set {1,2,3} 2. 集合怎么用 去重 集合是无序的 集合就是一个没有值的字典,遵循:唯一,无序,元素要求可哈希(不可变) 集合是可变的 2.1 增 方法一: s.updat ...

  3. javaEE(2)_http协议

    一.HTTP协议简介 1.客户端连上web服务器后,若想获得web服务器中的某个web资源,需遵守一定的通讯格式,HTTP协议用于定义客户端与web服务器通迅的格式.dos环境下可直接通过telnet ...

  4. 当数据量很少的时候,tableview会显示多余的cell--iOS开发系列---项目中成长的知识二

    当数据量很少的时候,tableview会显示很多的cell,而且是空白的,这样很不美观 所以使用下面的方法可以去掉多余的底部的cell 原理是:设置footerView为frame 是 CGRectZ ...

  5. 基于Vue+VueRouter+ModJS+Fis3快速搭建H5项目总结

    技术选型 • 框架 - Vue+VueRouter • 相比较于react/angular/avalon ? • 简单轻量,社区配套完整• 模块化 - ModJS • 相比较于require/seaj ...

  6. Qt读写excel

    今天在利用Qt进行excel操作时,代码总是走到打开excel这一步是总是出现程序崩溃.在网上查找了各种帖子  说法不一,尝试都没有解决.后来猜想是不是excel没有激活影响的.发现自己的excel没 ...

  7. HDU - 4811 - Ball (思维)

    题意: 给出一定数量的三种颜色的球,计算如何摆放得到值最大(有一定顺序) 有三种摆放方法 1.如果放的是第一个(桌子上原来没有),数值不变 2.如果在末尾追加一个,那么增加前面不同颜色的个数的值 3. ...

  8. PAT 乙级 1008

    题目 题目地址:PAT 乙级 1008 思路 本题需要注意的一点是当 m > n 的时候会出现逻辑性的错误,需要在 m > n 情况下对m做模运算,即 m % n 代码 #include ...

  9. vim中使用pydiction对python代码进行补全

    在配置完vim插件YouCompleteMe之后,在vim编写python的时候按tab键会报错,E121: Undefined variable: g:pydiction_location Pydi ...

  10. selenium.common.exceptions.WebDriverException: Message: u'unknown error: cannot get automation extension\nfrom unknown error: page could not be found: chrome-extension://aapnijgdinlhnhlmodcfapnahmbfeb

    Python2.7 selenium3.4.1在使用chrome driver时报错:selenium.common.exceptions.WebDriverException: Message: u ...