HDU 3394 双连通分量 桥 Railway
第一个答案是统计图中桥的个数
如果一个点-双连通分量中边的个数大于点的个数那么这个块中所有的边都是冲突的,累加到第二个答案中去。
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <vector>
#include <map>
#include <stack>
#define MP make_pair
#define Ft first
#define Sd second
using namespace std; typedef pair<int, int> PII; const int maxn = + ; int n, m; vector<int> G[maxn]; vector<PII> bcc[maxn];
stack<PII> S;
int pre[maxn], low[maxn], dfs_clock, bcc_cnt; int ans1, ans2; void dfs(int u, int fa)
{
low[u] = pre[u] = ++dfs_clock;
for(int i = ; i < G[u].size(); i++)
{
int v = G[u][i];
if(!pre[v])
{
S.push(MP(u, v));
dfs(v, u);
low[u] = min(low[u], low[v]); if(low[v] >= pre[u])
{
bcc_cnt++;
bcc[bcc_cnt].clear();
for(;;)
{
PII x = S.top(); S.pop();
bcc[bcc_cnt].push_back(x);
if(x.Ft == u && x.Sd == v) break;
}
if(low[v] > pre[u]) ans1++; //bridge
}
}
else if(v != fa && pre[v] < pre[u])
{
S.push(MP(u, v));
low[u] = min(low[u], pre[v]);
}
}
} void find_bcc()
{
memset(pre, , sizeof(pre));
dfs_clock = bcc_cnt = ;
for(int i = ; i < n; i++) if(!pre[i]) dfs(i, -);
} bool vis[maxn]; int main()
{
while(scanf("%d%d", &n, &m) == && n)
{
for(int i = ; i < n; i++) G[i].clear();
while(m--)
{
int u, v; scanf("%d%d", &u, &v);
G[u].push_back(v);
G[v].push_back(u);
} ans1 = ans2 = ;
find_bcc(); for(int i = ; i <= bcc_cnt; i++)
{
memset(vis, false, sizeof(vis));
int vertex = , sz = bcc[i].size();
for(int j = ; j < sz; j++)
{
PII x = bcc[i][j];
if(!vis[x.Ft]) { vis[x.Ft] = true; vertex++; }
if(!vis[x.Sd]) { vis[x.Sd] = true; vertex++; }
}
if(sz > vertex) ans2 += sz;
} printf("%d %d\n", ans1, ans2);
} return ;
}
代码君
HDU 3394 双连通分量 桥 Railway的更多相关文章
- Graph_Master(连通分量_A_双连通分量+桥)
hdu 5409 题目大意:给出一张简单图,求对应输入的m条边,第i-th条边被删除后,哪两个点不连通(u,v,u<v),若有多解,使得u尽量大的同时v尽量小. 解题过程:拿到题面的第一反应缩点 ...
- HDU4612 Warm up 边双连通分量&&桥&&树直径
题目的意思很简单,给你一个已经连通的无向图,我们知道,图上不同的边连通分量之间有一定数量的桥,题目要求的就是要你再在这个图上加一条边,使得图的桥数目减到最少. 首先要做的就是找出桥,以及每个点所各自代 ...
- HDU 4738 双连通分量 Caocao's Bridges
求权值最小的桥,考虑几种特殊情况: 图本身不连通,那么就不用派人去了 图的边双连通分量只有一个,答案是-1 桥的最小权值是0,但是也要派一个人过去 #include <iostream> ...
- HDU 2242 双连通分量 考研路茫茫——空调教室
思路就是求边双连通分量,然后缩点,再用树形DP搞一下. 代码和求强连通很类似,有点神奇,=_=,慢慢消化吧 #include <cstdio> #include <cstring&g ...
- HDU 5458 Stability(双连通分量+LCA+并查集+树状数组)(2015 ACM/ICPC Asia Regional Shenyang Online)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5458 Problem Description Given an undirected connecte ...
- 【HDU4612】 双连通分量求桥
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4612 题目大意:给你一个无向图,问你加一条边后最少还剩下多少多少割边. 解题思路:好水的一道模板题.先 ...
- hdu 3394(点双连通)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3394 思路:题目的意思是要求无向图中的冲突边和不需要边的条数,如果一个块中有多个环,则该块中的每条边都 ...
- hdu 2460(tarjan求边双连通分量+LCA)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2460 思路:题目的意思是要求在原图中加边后桥的数量,首先我们可以通过Tarjan求边双连通分量,对于边 ...
- HDU 4612——Warm up——————【边双连通分量、树的直径】
Warm up Time Limit:5000MS Memory Limit:65535KB 64bit IO Format:%I64d & %I64u Submit Stat ...
随机推荐
- [USACO07JAN]平衡的阵容Balanced Lineup
[USACO07JAN]平衡的阵容Balanced Lineup 题目描述 For the daily milking, Farmer John's N cows (1 ≤ N ≤ 50,000) a ...
- StringMVC
public class FirstController implements Controller { public ModelAndView handleRequest(HttpServletRe ...
- Android 自定义Adapter中实现startActivityForResult的分析
最近几天在做文件上传的时候,想在自定义Adapter中启动activity时也返回Intent数据,于是想到了用startActivityForResult,可是用mContext怎么也调不出这个方法 ...
- Wireshark漫谈(一)
可能有人会说,一个软件的安装有什么好谈的,无非就是"同意,同意,同意......是,是,是"诸如此类的选项.的确,Wireshark软件的安装步骤是挺简单的,不过本文不是想谈安装步 ...
- LR脚本示例之参数_变量介绍
Action(){ char *url = "127.0.0.1:1080"; char arr_url[1024]; //将url变量的值复制给p_url1参数 lr_save_ ...
- UVA 10037 Bridge (基础DP)
题意: 过河模型:有n个人要渡河,每个人渡河所耗时可能不同,只有1只船且只能2人/船,船速取决于速度慢的人.问最少耗时多少才能都渡完河? 思路: n<2的情况比较简单. 考虑n>2的情况, ...
- UVA 1619 Feel Good 感觉不错 (扫描法)
Feel Good Time Limit: 3000MS Memory Limit: Unknown 64bit IO Format: %lld & %llu Bill is deve ...
- coreData-Fetching Managed Objects
https://developer.apple.com/library/content/documentation/DataManagement/Conceptual/CoreDataSnippets ...
- Linux 备份
备份之前的准备工作 安装常用的软件 常用软件的安装,见我另一篇blog Ubuntu 16.04 安装札记 的第四部分. 清理系统中没用的垃圾 至于垃圾清理,主要清理对象有 sudo rm -r ~/ ...
- [神经网络]一步一步使用Mobile-Net完成视觉识别(一)
1.环境配置 2.数据集获取 3.训练集获取 4.训练 5.调用测试训练结果 6.代码讲解 本文是第一篇,环境配置篇. 先打开tensorflow object detection api 看看需要什 ...