UVA 10765 Doves and bombs(双连通分量)
2024-08-29 12:56:17
题意:在一个无向连通图上,求任意删除一个点,余下连通块的个数。
对于一个非割顶的点,删除之后,原图仍连通,即余下连通块个数为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 ;
}
最新文章
- Android Studio开发RecyclerView遇到的各种问题以及解决(一)
- 领域模型驱动设计(Domain Driven Design)入门概述
- 扩展HT for Web之HTML5表格组件的Renderer和Editor
- 51nod 1076强连通
- python函数的参数
- bellman ford优先队列优化简介模板
- Struts2 Convention插件的使用(2)return视图以及jsp的关系
- Bootstrap的Affix与ScrollSpy用法 bootstrap-scrollspy &;&; bootstrap-dropdown
- CentOS(Linux) - SVN使用笔记(二) - 创建SVN仓库及下载仓库到本地
- Smarty - 安装+入门小例子
- RegularExpressionValidator控件
- LeetCode之“动态规划”:Unique Binary Search Trees &;&; Unique Binary Search Trees II
- Scrapy框架-Item Pipeline
- [规则原则定理]规则原则定理章4 HTTP&;RPC
- django之模型层(model)--查询补充及cookie
- zabbix3.0.4关于java服务端程序内存溢出的处理
- いっしょ / Be Together (暴力枚举)
- NFS安装及优化过程--centos6.6
- kubernetes API Server 权限管理实践
- jquery validate 使用示例
热门文章
- Ext学习-前后交互模式介绍
- Entity Framework 基础
- [转载]DirectoryEntry配置IIS7出现ADSI Error:未知错误(0x80005000)
- NData BUG 记录
- dom4j处理xml文件,读取xml字符串,格式化xml文件
- NGINX的奇淫技巧 —— 6. IF实现数学比较功能 (1)
- jsp bean标签
- IOS NSPredicate 查询、搜索
- poj 3358 Period of an Infinite Binary Expansion
- 1050 Moving Tables