UVA10765-Doves and bombs(BCC)
option=com_onlinejudge&Itemid=8&page=show_problem&problem=1706">题目链接
题意:给定一个n个点的连通的无向图。一个点的“鸽子值”定义为将它从图中删去后连通块的个数。
求“鸽子值”按降序排列的前m个。
思路:事实上题目就是要用来寻找割顶,我们仅仅需找出割顶。然后记录这个割顶属于几个不同连通分量的公共点,不是割点的,去掉之后。图的连通块数为1。
代码:
#include <iostream>
#include <cstdio>
#include <cstring>
#include <vector>
#include <stack>
#include <algorithm> using namespace std; const int MAXN = 10005; struct node{
int id, val;
}b[MAXN]; int n, m;
int pre[MAXN], low[MAXN], dfs_clock;
vector<int> g[MAXN]; void init() {
for (int i = 0; i < n; i++)
g[i].clear();
for (int i = 0; i < n; i++) {
b[i].id = i;
b[i].val = 1;
}
} bool cmp(node a, node b) {
if (a.val == b.val)
return a.id < b.id;
return a.val > b.val;
} int dfs(int u, int fa) {
int lowu = pre[u] = ++dfs_clock;
int child = 0;
for (int i = 0; i < g[u].size(); i++) {
int v = g[u][i];
if (!pre[v]) {
child++;
int lowv = dfs(v, u);
lowu = min(lowu, lowv);
if (lowv >= pre[u]) {
b[u].val++;
}
}
else if (pre[v] < pre[u] && v != fa) {
lowu = min(lowu, pre[v]);
}
}
if (fa < 0 && child == 1) b[u].val = 1;
low[u] = lowu;
return lowu;
} void find_bcc(int n) {
memset(pre, 0, sizeof(pre));
memset(low, 0, sizeof(low));
dfs_clock = 0;
for (int i = 0; i < n; i++)
if (!pre[i])
dfs(i, -1);
} int main() {
while (scanf("%d%d", &n, &m)) {
if (n == 0 && m == 0)
break;
init();
int u, v;
while (scanf("%d%d", &u, &v)) {
if (u == -1 && v == -1)
break;
g[u].push_back(v);
g[v].push_back(u);
} find_bcc(n);
sort(b, b + n, cmp);
for (int i = 0; i < m; i++)
printf("%d %d\n", b[i].id, b[i].val);
puts("");
}
return 0;
}
UVA10765-Doves and bombs(BCC)的更多相关文章
- UVA-10765 Doves and bombs (双连通分量)
题目大意:给一个n个点的无向连通图,找出删除某个点后的连通块个数. 题目分析:统计一下每个节点属于几个双连通分量,若是割点,得到的便是答案,否则答案为1. 代码如下: # include<ios ...
- 【UVA10765】Doves and bombs (BCC求割点后联通块数量)
题目: 题意: 给了一个联通无向图,现在问去掉某个点,会让图变成几个联通块? 输出的按分出的从多到小,若相等,输出标号从小到大.输出M个. 分析: BCC求割点后联通块数量,Tarjan算法. 联通块 ...
- UVA 10765 Doves and bombs(双连通分量)
题意:在一个无向连通图上,求任意删除一个点,余下连通块的个数. 对于一个非割顶的点,删除之后,原图仍连通,即余下连通块个数为1:对于割顶,余下连通块个数>=2. 由于是用dfs查找双连通分量,树 ...
- UVA 10765 Doves and bombs
给定一个无向的连通图,要求每个点去掉后连通分量的数目,然后输出连通分量最多的m个点. 分析: 先求出双连通分量,然后统计所有双连通分量中割顶出现的次数,最后求出的就是割顶去掉后剩下的双连通的数目,对于 ...
- Doves and bombs UVA - 10765(统计割顶所连接的连通块的数量)
题意:给定一个n个点的连通的无向图,一个点的“鸽子值”定义为将它从图中删去后连通块的个数. 求对应的点 和 每个点的“鸽子值” 用一个数组在判断割顶的那个地方 累加标记一下所连接的连通块的数量即可 初 ...
- UVA 10765 Doves and bombs 割点
最近好懒,堆了好多题没写题解.. 原题链接:https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8& ...
- uva 10765 Doves and Bombs(割顶)
题意:给定一个n个点的连通的无向图,一个点的"鸽子值"定义为将它从图中删去后连通块的个数.求每一个点的"鸽子值". 思路dfs检查每一个点是否为割顶,并标 ...
- [Outlook] outlook如何实现自动CC和BCC邮件发送
由于需要在不同机器上发送邮件,最终发送的邮件会在不同的机器上,最终导致邮件丢失,以后想找也找不回来,故在网上搜索一翻,找到解决办法. 1. 实现自动CC邮件发送: 方法:使用outlook的配置规则 ...
- 模拟 Codeforces Round #203 (Div. 2) C. Bombs
题目地址:http://codeforces.com/problemset/problem/350/C /* 题意:机器人上下左右走路,把其他的机器人都干掉要几步,好吧我其实没读懂题目, 看着样例猜出 ...
随机推荐
- hdu 2218
题意: 切蛋糕问题 水题...... AC代码: #include <iostream> using namespace std; int main() { int a[6],i,n; c ...
- jQuery验证框架 .
目录视图 摘要视图 订阅 “程序人生”中国软件开发者职业生涯调查 CSDN社区“三八节”特别活动 开发者职业生涯调查之未来 jQuery验证框架 分类: JQuery 2 ...
- zookeeper集群的安装
顾名思义zookeeper就是动物园管理员,他是用来管hadoop(大象).Hive(蜜蜂).pig(小猪)的管理员, Apache Hbase和 Apache Solr 的分布式集群都用到了zook ...
- PHP防注入转义功能
PHP addslashes() 函数 $str = addslashes('Shanghai is the "biggest" city in China.'); echo($s ...
- php改写session到数据库
session改写mysql 在调用 session_start();的地方改用实例化本类即可new SessionDB(); session_set_save_handler( array($thi ...
- Mysql 查询性能优化
查询优化,索引优化,库表结构优化需要齐头并进,一个不能落. 为什么查询速度会慢 在阐释编写快速的查询之前,需要清楚一点,真正重要的是响应时间.如果把查询看做是一个任务的话,那么它由一系列子任务构成,每 ...
- VS2013 编译 MySql Connector C 6.1.6
1.下载cmake http://cmake.org/ 2.下载最新版MySql Connector C http://www.mysql.com 3.命令行下,转到源代码目录下,"cmak ...
- salt-grains
自定义grains 的方法 1: 在minion 的配置文件夹 /etc/salt/minion.d 下面包含的配置文件 grains.conf 2: 在salt的安装目录中建立grains 文件 ...
- 复杂事件处理引擎—Esper入门(第二弹)
说明: 以下内容,可以参考Esper官方网站<Qucik start & Tutorial >(顺序做了部分调整). PS:因为英语水平有限(大学期间刚过CET4的英语小盲童一枚) ...
- js 比较日期大小
//1获取当前时间 var curTime = new Date(); //2把字符串格式转换为日期类 var startTime = new Date(Date.parse(kc.begintime ...