题目链接:https://vjudge.net/contest/166461#problem/B

题意:

给一个无向图,求每一个点删除后,剩下的连通块的数目;

分析:

只有割顶被删掉后,连通分量才会改变,改变多少呢? 就是他这个割顶除 父亲结点,的其他孩子结点(及其子孙结点)是否返回到最早的祖先结点(lowv) <= low[u];再加上原图的连通块;

WA了很多次,错误地方有两个;

1、板子抄错了,low 函数没有用子孙结点更新;

2、即时不是割顶,也要加入结果中,就当是他删掉后,连通分量没有改变;

#include <bits/stdc++.h>

using namespace std;

const int maxn = +;
int n,m; bool cmp(pair<int,int> a,pair<int,int> b) {
if(a.second == b.second)
return a.first < b.first;
return a.second > b.second;
} struct Sol {
int pre[maxn],iscut[maxn],dfs_clock,bcc_cnt,low[maxn];
vector<int> G[maxn];
vector<pair<int,int> > ans; void init(int n) {
for(int i=;i<=n;i++)
G[i].clear();
ans.clear();
} void AddEdge(int from,int to) {
G[from].push_back(to);
G[to].push_back(from);
} int dfs(int u,int fa) {
int lowu = pre[u] = ++dfs_clock;
int child = ,num = ;
for(int i=; i<G[u].size(); i++) {
int v = G[u][i];
if(v==fa) continue;
if(!pre[v]) {
child++;
int lowv = dfs(v,u);
lowu = min(lowu,lowv);
if(lowv>=pre[u]) {
iscut[u] = true;
num++;
}
} else if(pre[v]<pre[u]) {
lowu = min(lowu,pre[v]);
}
}
if(fa<&&child==) {
iscut[u] = ;
num = ;
}
//if(iscut[u])
ans.push_back(make_pair(u,num));
low[u] = lowu;
return lowu;
} void find_bcc(int n) {
memset(pre,,sizeof(pre));
memset(iscut,,sizeof(iscut));
memset(low,,sizeof(low));
dfs_clock = bcc_cnt = ;
for(int i=; i<n; i++)
if(!pre[i]) {
bcc_cnt++;
dfs(i,-);
}
} void print_ans() {
sort(ans.begin(),ans.end(),cmp);
for(int i=; i<m; i++)
printf("%d %d\n",ans[i].first,ans[i].second+bcc_cnt);
puts("");
}
} sol; int main() {
while(scanf("%d%d",&n,&m),n) {
sol.init(n);
int u,v;
while(true) {
scanf("%d%d",&u,&v);
if(u==-) break;
sol.AddEdge(u,v);
}
sol.find_bcc(n);
sol.print_ans();
} return ;
}

Uva 10765 鸽子和炸弹的更多相关文章

  1. UVa 10765 鸽子和炸弹(割点)

    https://vjudge.net/problem/UVA-10765 题意: 给一个n个点的无向图,求每个点删去后形成的连通分量数. 思路: 判断割点,如果是割点的话,在dfs的时候计算出删去它后 ...

  2. Doves and bombs UVA - 10765(统计割顶所连接的连通块的数量)

    题意:给定一个n个点的连通的无向图,一个点的“鸽子值”定义为将它从图中删去后连通块的个数. 求对应的点 和 每个点的“鸽子值” 用一个数组在判断割顶的那个地方 累加标记一下所连接的连通块的数量即可 初 ...

  3. UVA 10765 Doves and bombs 割点

    最近好懒,堆了好多题没写题解.. 原题链接:https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8& ...

  4. uva 10765 Doves and Bombs(割顶)

     题意:给定一个n个点的连通的无向图,一个点的"鸽子值"定义为将它从图中删去后连通块的个数.求每一个点的"鸽子值". 思路dfs检查每一个点是否为割顶,并标 ...

  5. UVA 10765 Doves and bombs(双连通分量)

    题意:在一个无向连通图上,求任意删除一个点,余下连通块的个数. 对于一个非割顶的点,删除之后,原图仍连通,即余下连通块个数为1:对于割顶,余下连通块个数>=2. 由于是用dfs查找双连通分量,树 ...

  6. UVA 10765 Doves and bombs

    给定一个无向的连通图,要求每个点去掉后连通分量的数目,然后输出连通分量最多的m个点. 分析: 先求出双连通分量,然后统计所有双连通分量中割顶出现的次数,最后求出的就是割顶去掉后剩下的双连通的数目,对于 ...

  7. 【吃炸弹的鸽子UVA10765-双联通模板】

    ·从前有一个鸽子Lence,它吃了一个炸弹,然后有人出了这道题. ·英文题,述大意:        给出一张连通无向图,求出:对于每个点,删去这个点(以及它相连的边以后)时,当前图中的连通块数量,这个 ...

  8. uva 1354 Mobile Computing ——yhx

    aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAABGcAAANuCAYAAAC7f2QuAAAgAElEQVR4nOy9XUhjWbo3vu72RRgkF5

  9. UVA 10564 Paths through the Hourglass[DP 打印]

    UVA - 10564 Paths through the Hourglass 题意: 要求从第一层走到最下面一层,只能往左下或右下走 问有多少条路径之和刚好等于S? 如果有的话,输出字典序最小的路径 ...

随机推荐

  1. vue项目echarts画布删除历史数据重新渲染数据

    vue用到echarts时,根据select多选下拉框进行echarts折线图渲染.发现折现只能增加不能减少,后来根据echarts API文档发现 调用方式: chart.setOption(opt ...

  2. 重入锁--ReentrantLock

    本部分主要参考<java并发编程艺术>一书相关内容,同时参考https://blog.csdn.net/zhilinboke/article/details/83104597,说的非常形象 ...

  3. 飞檐走壁navMesh

    http://www.manew.com/thread-106030-1-1.html

  4. Coursera 机器学习 第7章 Support Vector Machines 学习笔记

    7 Support Vector Machines7.1 Large Margin Classification7.1.1 Optimization Objective支持向量机(SVM)代价函数在数 ...

  5. nyoj 325——zb的生日——————【dp】

    zb的生日 时间限制:3000 ms  |  内存限制:65535 KB 难度:2   描述 今天是阴历七月初五,acm队员zb的生日.zb正在和C小加.never在武汉集训.他想给这两位兄弟买点什么 ...

  6. WCF入门教程通信(二)

    一.概述 WCF能够建立一个跨平台的安全.可信赖.事务性的解决方案,是一个WebService,.Net Remoting,Enterprise Service,WSE,MSMQ的并集,有一副很经典的 ...

  7. Javascript模块化编程(一)模块的写法最佳实践六、输入全局变量 独立性是模块的重要特点,模块内部最好不与程序的其他部分直接交互。 为了在模块内部调用全局变量,必须显式地将其他变量输入模块。

    Javascript模块化编程,已经成为一个迫切的需求.理想情况下,开发者只需要实现核心的业务逻辑,其他都可以加载别人已经写好的模块但是,Javascript不是一种模块化编程语言,它不支持类clas ...

  8. Javaweb的get请求乱码解决

    get方式请求:即将参数放在URL中,因此这就涉及到URL的编码了 方式一:[推荐] 方式二: 前端编码: encodeURI(encodeURI("")) 后端解码: java. ...

  9. VMware装Linux系统全屏问题

    在VMware上出装Linux,有强迫症的患者总是无法接受它不能全屏的问题,当然网上也有该问题的解决方案,但是搜索出来的答案总是零零散散,让很多初学者望而却步!今天笔者根据自己的机遇总结一遍最完备的解 ...

  10. cf888G. Xor-MST(Boruvka最小生成树 Trie树)

    题意 题目链接 给出\(n\)点,每个点有一个点权\(a[i]\),相邻两点之间的边权为\(a[i] \oplus a[j]\),求最小生成树的值 Sol 非常interesting的一道题,我做过两 ...