题意:在一个无向连通图上,求任意删除一个点,余下连通块的个数。

对于一个非割顶的点,删除之后,原图仍连通,即余下连通块个数为1;对于割顶,余下连通块个数>=2。

由于是用dfs查找双连通分量,树形结构是向下搜素,所以在dfs过程中不便于统计割顶所分连通分量的个数。换一个角度,通过在vector<int>bcc中保存各个双连通分量的点,统计各个点出现的次数即可。(除割顶外,每个点只可能出现一次)

 #include<cstdio>
#include<cstring>
#include<algorithm>
#include<vector>
#include<stack>
using namespace std; const int MAXN= ; struct Edge{
int u,v;
Edge(){}
Edge(int _u,int _v):u(_u),v(_v){}
}; struct Cut{
int c,w;
}cut[MAXN]; int iscut[MAXN],pre[MAXN],low[MAXN],dfs_clock,bcc_cnt,bccno[MAXN];
int son;
vector<int >G[MAXN],bcc[MAXN];
stack<Edge>stk; void dfs(int u,int fa)
{
pre[u]=low[u]=dfs_clock++;
son=;
for(int i=;i<G[u].size();i++)
{
int v=G[u][i];
Edge e=Edge(u,v);
if(!pre[v]){
stk.push(e);
son++;
dfs(v,u);
low[u]=min(low[u],low[v]);
if(low[v]>=pre[u]){
iscut[u]=;
bcc_cnt++;
bcc[bcc_cnt].clear();
while()
{
Edge x=stk.top();
stk.pop();
if(bccno[x.u]!=bcc_cnt){
bcc[bcc_cnt].push_back(x.u);
bccno[x.u]=bcc_cnt;
}
if(bccno[x.v]!=bcc_cnt){
bcc[bcc_cnt].push_back(x.v);
bccno[x.v]=bcc_cnt;
}
if(x.u==u&&x.v==v)
break;
}
}
}else if(pre[v]<pre[u]&&v!=fa){
stk.push(e);
low[u]=min(low[u],pre[v]);
}
}
if(fa==-&&son==)
iscut[u]=;
} void find_bcc(int n)
{
bcc_cnt=dfs_clock=;
memset(pre,,sizeof(pre));
memset(bccno,,sizeof(bccno));
memset(iscut,,sizeof(iscut));
memset(cut,,sizeof(cut)); for(int i=;i<n;i++)
if(!pre[i])
dfs(i,-);
} int cmp(Cut a,Cut b)
{
if(a.w==b.w)
return a.c<b.c;
return a.w>b.w;
} int main()
{
int n,m,x,y;
while(~scanf("%d%d",&n,&m))
{
if(!n&&!m)
return ;
for(int i=;i<n;i++)
G[i].clear(); while()
{
scanf("%d%d",&x,&y);
if(x==-&&y==-)
break;
G[x].push_back(y);
G[y].push_back(x);
} find_bcc(n); for(int i=;i<=bcc_cnt;i++)
{
for(int j=;j<bcc[i].size();j++)
{
cut[bcc[i][j]].c=bcc[i][j];
cut[bcc[i][j]].w++;
}
}
sort(cut,cut+n,cmp);
for(int i=;i<m;i++)
printf("%d %d\n",cut[i].c,cut[i].w);
puts("");
}
return ;
}

最新文章

  1. Android Studio开发RecyclerView遇到的各种问题以及解决(一)
  2. 领域模型驱动设计(Domain Driven Design)入门概述
  3. 扩展HT for Web之HTML5表格组件的Renderer和Editor
  4. 51nod 1076强连通
  5. python函数的参数
  6. bellman ford优先队列优化简介模板
  7. Struts2 Convention插件的使用(2)return视图以及jsp的关系
  8. Bootstrap的Affix与ScrollSpy用法 bootstrap-scrollspy &amp;&amp; bootstrap-dropdown
  9. CentOS(Linux) - SVN使用笔记(二) - 创建SVN仓库及下载仓库到本地
  10. Smarty - 安装+入门小例子
  11. RegularExpressionValidator控件
  12. LeetCode之“动态规划”:Unique Binary Search Trees &amp;&amp; Unique Binary Search Trees II
  13. Scrapy框架-Item Pipeline
  14. [规则原则定理]规则原则定理章4 HTTP&amp;RPC
  15. django之模型层(model)--查询补充及cookie
  16. zabbix3.0.4关于java服务端程序内存溢出的处理
  17. いっしょ / Be Together (暴力枚举)
  18. NFS安装及优化过程--centos6.6
  19. kubernetes API Server 权限管理实践
  20. jquery validate 使用示例

热门文章

  1. Ext学习-前后交互模式介绍
  2. Entity Framework 基础
  3. [转载]DirectoryEntry配置IIS7出现ADSI Error:未知错误(0x80005000)
  4. NData BUG 记录
  5. dom4j处理xml文件,读取xml字符串,格式化xml文件
  6. NGINX的奇淫技巧 —— 6. IF实现数学比较功能 (1)
  7. jsp bean标签
  8. IOS NSPredicate 查询、搜索
  9. poj 3358 Period of an Infinite Binary Expansion
  10. 1050 Moving Tables