UVALive 5135 Mining Your Own Business 双连通分量
据说这是一道Word Final的题,Orz。。。
原题链接:https://icpcarchive.ecs.baylor.edu/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=3136
题意:
给你一个联通图,让你选择一些点,使得这个图的任意一个点消失后,其余的点都能到达某个你选择的点。问你最少选择哪些点,并且输出在最优的情况下,有多少方案。
题解:
一眼看过去,做法很简单,就删掉所有的割点后,考察联通块的个数就好。但这道题满满的坑。。要不怎么是总决赛的题。。
首先如果这个图只有一个联通块,那么答案就应该是任选两个点,这是因为,如果其中一个点挂了,还能走另外一个点。
如果一个联通块有大于一个割点,那么这个联通块就不需要,这是因为两个割点不可能同时挂了。
代码:
#include<iostream>
#include<cstring>
#include<algorithm>
#include<vector>
#include<set>
#define MAX_V 50004
using namespace std; int V=;
vector<int> G[MAX_V];
int N; int dfn[MAX_V],low[MAX_V],ind=;
bool vis[MAX_V];
bool isCut[MAX_V];
int tot=; long long ways=;
long long tmp=;
long long cnt=; bool used[MAX_V];
set<int> se; void init(){
se.clear();
V=ind=cnt=tmp=;
ways=;
memset(used,,sizeof(used));
memset(dfn,,sizeof(dfn));
memset(low,,sizeof(low));
memset(vis,,sizeof(vis));
memset(isCut,,sizeof(isCut));
for(int i=;i<=N+;i++)G[i].clear();
} void Tarjan(int u,int p) {
dfn[u] = low[u] = ++ind;
vis[u]=;
int child = ;
for (int i = ; i < G[u].size(); i++) {
int v = G[u][i];
if (v == p)continue;
if (!vis[v]) {
child++;
Tarjan(v, u);
low[u] = min(low[v], low[u]);
if (p == && child > )isCut[u] = ;
if (p&&low[v] >= dfn[u])
isCut[u] = ;
tot+=isCut[u];
}
else
low[u] = min(dfn[v], low[u]);
}
} void dfs(int u) {
if (used[u] || isCut[u])return;
tmp++;
used[u] = ;
for (int i = ; i < G[u].size(); i++){
int v=G[u][i];
if(isCut[v]){
se.insert(v);
continue;
}
dfs(v);
}
} int main() {
int cas = ;
cin.sync_with_stdio(false);
while (cin >> N) {
tot=;
if (N == )break;
init();
for (int i = ; i < N; i++) {
int u, v;
cin >> u >> v;
V = max(V, max(u, v));
G[u].push_back(v);
G[v].push_back(u);
}
Tarjan(, );
cout << "Case " << ++cas << ": ";
if (tot == ) {
cout << << " " << (long long)V * (V - ) / << endl;
continue;
}
for (int u = ; u <= V; u++) {
if (isCut[u])continue;
tmp = ;
if (!used[u]) {
se.clear();
dfs(u);
if (se.size() == && tmp) {
ways *= tmp;
cnt++;
}
}
}
cout << cnt << " " << ways << endl;
}
return ;
}
UVALive 5135 Mining Your Own Business 双连通分量的更多相关文章
- UVALive 5135 Mining Your Own Business 双连通分量 2011final
题意:n条隧道由一些点连接而成,其中每条隧道链接两个连接点.任意两个连接点之间最多只有一条隧道.任务就是在这些连接点中,安装尽量少的太平井和逃生装置,使得不管哪个连接点倒塌,工人都能从其他太平井逃脱, ...
- UVALive - 5135 - Mining Your Own Business(双连通分量+思维)
Problem UVALive - 5135 - Mining Your Own Business Time Limit: 5000 mSec Problem Description John D ...
- UVALive - 5135 Mining Your Own Business
刘汝佳白书上面的一道题目:题意是给定一个联通分量,求出割顶以及双连通分量的个数,并且要求出安放安全井的种类数,也就是每个双连通分量中结点数(除开 割顶)个数相乘,对于有2个及以上割顶的双连通分量可以不 ...
- LA 5135 井下矿工(点—双连通分量模板题)
https://vjudge.net/problem/UVALive-5135 题意:在一个无向图上选择尽量少的点涂黑,使得任意删除一个点后,每个连通分量至少有一个黑点. 思路: 首先dfs遍历求出割 ...
- 【LA】5135 Mining Your Own Business
[算法]点双连通分量 [题解]详见<算法竞赛入门竞赛入门经典训练指南>P318-319 细节在代码中用important标注. #include<cstdio> #includ ...
- UVALive 5135 Mining Your Own Bussiness【tarjan点双】
LINK1 LINK2 题目大意 给你一个无向连通图,让你给一些点染上黑色,需要满足染色之后,断开任意一个节点,要满足任意一个联通块中剩下的节点中至少有一个黑点 思路 一开始想的是把每一个点双联通分量 ...
- LA 5135 Mining Your Own Business
求出 bcc 后再……根据大白书上的思路即可. 然后我用的是自定义的 stack 类模板: #include<cstdio> #include<cstring> #includ ...
- 训练指南 UVALive - 5135 (双连通分量)
layout: post title: 训练指南 UVALive - 5135 (双连通分量) author: "luowentaoaa" catalog: true mathja ...
- hdu3844 Mining Your Own Business,无向双连接组件
点击打开链接 无向图的双连通分量 #include<cstdio> #include<stack> #include<vector> #include<map ...
随机推荐
- 爬虫之Scrapy和分页
下一页和详情页的处理 xpath提取时 注意: 结合网页源代码一起查找 不用框架的爬取 获取下一页 自带href属性 1)首页有下一页 next_url = element.xpath('.//a[t ...
- vagrant 安装ubuntu12.04 64 bit
1 下载用于ubuntu 12.04 用于vagrant的镜像,虚拟机是virtualbox $ wget http://files.vagrantup.com/precise64.box jb@e3 ...
- HTTP和HTTPS以及两者的区别
HTTP:是互联网上的应用广泛的一种网络协议,是一个客户端和服务器端请求和应答的传输协议,它可以使浏览器更加高效,使网络传输减少. HTTPS:是以安全为目标的HTTP通道,简单讲是HTTP的安全版, ...
- Tarjan算法及其应用
Tarjan算法及其应用 引入 tarjan算法可以在图上求解LCA,强连通分量,双联通分量(点双,边双),割点,割边,等各种问题. 这里简单整理一下tarjan算法的几个应用. LCA http:/ ...
- 光学字符识别OCR-3
连通性 可以看到,每一层的图像是由若干连通区域组成的,文字本身是由笔画较为密集组成的,因此往往文字也能够组成一个连通区域.这里的连通定义为 8邻接,即某个像素周围的8个像素都定义为邻接像素,邻接的像素 ...
- idea Live Template 快速使用
善用LiveTemplates,好用到没朋友,我凑揍 , 尊重原创,原文链接: https://blog.csdn.net/u012721933/article/details/52461103#co ...
- Mac 之 STF 搭建(淘宝源安装)
参考链接:https://www.jianshu.com/p/5fe8cb7d214f (MAC直接安装STF)https://www.jianshu.com/p/c5c298486dbd(homeb ...
- webdriver高级应用- 右键另存为下载文件
1.要使用右键另存,需要先按照第三方工具AutoIt: 链接: https://pan.baidu.com/s/12aBBhOOTmyQpH9hukt0XGA 密码: fcdk 2.创建一个名为loa ...
- python学习--Python之import与from...import的区别与用法
Python编码第一步是导入模块,有时候用import ***有时候用from...import,它们有什么区别呢,请看实例A/B: A: 1.当模块test.py中没有类,只有方法add,此方法实现 ...
- Leetcode 467.环绕字符串中的唯一子字符串
环绕字符串中的唯一子字符串 把字符串 s 看作是"abcdefghijklmnopqrstuvwxyz"的无限环绕字符串,所以 s 看起来是这样的:"...zabcdef ...