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 ...
随机推荐
- 微信公众号JSAPI支付
微信公众号JSAPI支付 一:配置参数 申请成功后,获取接口文件, 将所有文件放入项目根目录weixin下,在WxPay.ub.config.php中填入配置账户信息; 二:设置授权 开发者中心-&g ...
- PHP实现创建一个文件
方法一:file_put_content($filename,$content); function mk_document($filename,$content=''){ // var_dump(_ ...
- DevOps架构实践
1. 场景 持续部署:业界没有统一明确地定义,简单理解为将集成结果部署到不同的环境供用户使用,并且立即反馈部署结果的实践,其中不同的环境包括:开发环境.测试环境.预发布环境.生产环境 持续部署两个核心 ...
- TabLayout与ViewPager同步后Tab的标题不显示
一.概述 1.1 问题描述 TabLayout+ViewPager后,TabLayout的TabItem不显示的问题: 1.2 截图 二.结论 mTabs.setupWithViewPager(mVi ...
- hihocoder1478 水陆距离
地址:http://hihocoder.com/problemset/problem/1478 题目: 水陆距离 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 给定一个 ...
- Java线程常用方法汇总
1.sleep() 使当前线程(即调用该方法的线程)暂停执行一段时间,让其他线程有机会继续执行,但它并不释放对象锁.也就是说如果有synchronized同步快,其他线程仍然不能访问共享数据.注意该方 ...
- java内存回收
java中引用类型 强引用 Persnon p = new Person(); 当指向Person对象的引用计数为0时,Person对象才能被垃圾回收器回收. 软引用 SoftReference&l ...
- hibernate的面向对象查询的效率有多低?
前言 老平台的查询速度很慢,需要进行优化(...说白了就是优化sql语句),老平台用的strus2+hibernate框架,查询基本都是使用的HSQL. 关于hsql HQL是Hibernate Qu ...
- MySQL-5.7 备份与恢复
一.备份分类 按介质分类: 物理备份 指通过拷贝数据库文件方式完成备份,适用于数据库很大,数据重要且需要快速恢复的数据库. 逻辑备份 指通过备份数据库的逻辑结构和数据内容的方式完成备份,适用于数据库不 ...
- 20145314郑凯杰《信息安全系统设计基础》第9周学习总结 PART B
20145314郑凯杰<信息安全系统设计基础>第9周学习总结 PART B 明确教材学习目标 注意每个系统调用的参数.返回值,会查帮助文档 阅读教材,完成课后练习(书中有参考答案),考核: ...