UVA-10765 Doves and bombs (双连通分量)
题目大意:给一个n个点的无向连通图,找出删除某个点后的连通块个数。
题目分析:统计一下每个节点属于几个双连通分量,若是割点,得到的便是答案,否则答案为1。
代码如下:
# include<iostream>
# include<cstdio>
# include<stack>
# include<vector>
# include<cstring>
# include<algorithm>
using namespace std;
# define REP(i,s,n) for(int i=s;i<n;++i)
# define CL(a,b) memset(a,b,sizeof(a)); const int N=10005;
struct Edge
{
int u,v;
Edge(int _u,int _v):u(_u),v(_v){}
bool operator < (const Edge &a) const {
if(v==a.v) return u<a.u;
return v>a.v;
}
};
stack<Edge>S;
vector<Edge>ans;
vector<int>G[N],bcc[N];
int n,m,dfs_cnt,bcc_cnt,bccno[N],pre[N],low[N],cnt[N],iscut[N]; void dfs(int u,int fa)
{
low[u]=pre[u]=++dfs_cnt;
int child=0;
REP(i,0,G[u].size()){
int v=G[u][i];
if(pre[v]==0){
++child;
S.push(Edge(u,v));
dfs(v,u);
low[u]=min(low[u],low[v]);
if(low[v]>=pre[u]){
iscut[u]=1;
bcc[++bcc_cnt].clear();
while(1){
Edge x=S.top();
S.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){
S.push(Edge(u,v));
low[u]=min(low[u],pre[v]);
}
}
if(fa<0&&child==1) iscut[u]=0;
} void findBcc()
{
CL(bccno,0);
CL(iscut,0);
CL(pre,0);
dfs_cnt=bcc_cnt=0;
REP(i,0,n) if(!pre[i])
dfs(i,-1);
} int main()
{
int a,b;
while(scanf("%d%d",&n,&m)&&(n+m))
{
REP(i,0,n) G[i].clear();
while(scanf("%d%d",&a,&b))
{
if(a==-1&&b==-1)
break;
G[a].push_back(b);
G[b].push_back(a);
}
findBcc();
ans.clear();
CL(cnt,0);
REP(i,1,bcc_cnt+1) REP(j,0,bcc[i].size()) ++cnt[bcc[i][j]];
REP(i,0,n){
if(iscut[i])
ans.push_back(Edge(i,cnt[i]));
else
ans.push_back(Edge(i,1));
}
sort(ans.begin(),ans.end());
REP(i,0,m) printf("%d %d\n",ans[i].u,ans[i].v);
printf("\n");
}
return 0;
}
UVA-10765 Doves and bombs (双连通分量)的更多相关文章
- UVA 10765 Doves and bombs(双连通分量)
题意:在一个无向连通图上,求任意删除一个点,余下连通块的个数. 对于一个非割顶的点,删除之后,原图仍连通,即余下连通块个数为1:对于割顶,余下连通块个数>=2. 由于是用dfs查找双连通分量,树 ...
- UVA 10765 Doves and bombs
给定一个无向的连通图,要求每个点去掉后连通分量的数目,然后输出连通分量最多的m个点. 分析: 先求出双连通分量,然后统计所有双连通分量中割顶出现的次数,最后求出的就是割顶去掉后剩下的双连通的数目,对于 ...
- UVA 10765 Doves and bombs 割点
最近好懒,堆了好多题没写题解.. 原题链接:https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8& ...
- uva 10765 Doves and Bombs(割顶)
题意:给定一个n个点的连通的无向图,一个点的"鸽子值"定义为将它从图中删去后连通块的个数.求每一个点的"鸽子值". 思路dfs检查每一个点是否为割顶,并标 ...
- UVA 10972 - RevolC FaeLoN(边-双连通分量)
UVA 10972 - RevolC FaeLoN option=com_onlinejudge&Itemid=8&page=show_problem&category=547 ...
- 训练指南 UVA - 11324(双连通分量 + 缩点+ 基础DP)
layout: post title: 训练指南 UVA - 11324(双连通分量 + 缩点+ 基础DP) author: "luowentaoaa" catalog: true ...
- uva 10972(边双连通分量)
题目链接:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=33804. 思路:和poj的一道题有点像,不过这道题图可能不连通,因 ...
- LA 3523 圆桌骑士(二分图染色+点双连通分量)
https://vjudge.net/problem/UVALive-3523 题意: 有n个骑士经常举行圆桌会议,商讨大事.每次圆桌会议至少应有3个骑士参加,且相互憎恨的骑士不能坐在圆桌旁的相邻位置 ...
- poj 2942 Knights of the Round Table(无向图的双连通分量+二分图判定)
#include<cstdio> #include<cstring> #include<cmath> #include<cstdlib> #includ ...
随机推荐
- 这样才能使本地Mysql服务允许被外部主机连接(两步)
网上的N多方法都不全面,只有下面的第一步或第二步是不行的,必须同时执行下面两步操作: 修改mysql.user表 以root或debian-sys-maint身份登录mysql $ mysql -u ...
- Android Studio Tips
1. 可以通过ctrl+shift+a,然后输入reformat,就能看到对应的快捷键. 如果记不得快捷键了,都可以通过ctrl+shift+a来查找. 2. [Androidstudio]的坑之[@ ...
- WEB前端研发工程师编程能力成长之路(1)
[背景] 如果你是刚进入WEB前端研发领域,想试试这潭水有多深,看这篇文章吧: 如果你是做了两三年WEB产品前端研发,迷茫找不着提高之路,看这篇文章吧: 如果你是四五年的前端开发高手,没有难题能难得住 ...
- 《mysql必知必会》读书笔记--游标的使用
游标的使用 MySQL中游标只能用于存储过程 创建游标 CREATE PROCEDURE processorders() BEGIN DECLARE ordernumbers CURSOR FOR S ...
- 【android】夜间模式简单实现
完整代码,请参考我的博客园客户端,git地址:http://git.oschina.net/yso/CNBlogs 关于阅读类的app,有个夜间模式真是太重要了. 那么有两种方式可以实现夜间模式 1: ...
- eclipse调整字体大小
window->preferences->general->appearance->colors and fonts-> 双击Text Font 就调整字体大小了
- cocosBuider 控件命名的坑
这几天遇到了各种坑.... 各种控件名字问题.... bool CLevelLayer::onAssignCCBMemberVariable(cocos2d::CCObject * pTarget, ...
- 论文笔记:多标签学习综述(A review on multi-label learning algorithms)
2014 TKDE(IEEE Transactions on Knowledge and Data Engineering) 张敏灵,周志华 简单介绍 传统监督学习主要是单标签学习,而现实生活中目标样 ...
- NC开发笔记指导
修改端口 InvocationInfoProxy.getInstance().get().getUserCode(); 前台 Nchome F:\JAVA\Projects\ERPEHROA\ufid ...
- iOS 开发,混合使用 ARC 和非ARC
[前提知识] ARC:Automatic Reference Counting,自动引用计数 在开发 iOS 3 以及之前的版本的项目时我们要自己负责使用引用计数来管理内存,比如要手动 retain. ...