poj 3352Road Construction(无向双连通分量的分解)
/*
题意:给定一个连通的无向图G,至少要添加几条边,才能使其变为强连通图(指的是边强联通)。
思路:利用tarjan算法找出所有的双联通分量!然后根据low[]值的不同将双联通分量
进行缩点,最后图形会变成一棵树!也就是添加至少多少条边使一棵树变成强联通图!

知识点:若要使得任意一棵树,在增加若干条边后,变成一个双连通图,那么
至少增加的边数 =( 这棵树总度数为1的结点数 + 1 )/ 2
*/
#include<iostream>
#include<cstring>
#include<cstdio>
#include<algorithm>
#include<vector>
#define N 1005
using namespace std;
vector<int>g[N];
int low[N], pre[N];
int deg[N];
int n, m;
int cnt;
int dfsClock;
void dfs(int u, int fa){
low[u]=pre[u]=++dfsClock;
int len=g[u].size();
for(int i=; i<len; ++i){
int v=g[u][i];
if(!pre[v]){
dfs(v, u);
low[u]=min(low[u], low[v]);
}
else if(pre[v] < pre[u] && fa!=v)
low[u]=min(pre[v], low[u]);
}
}
int main(){
while(scanf("%d%d", &n, &m)!=EOF){
memset(pre, , sizeof(pre));
memset(deg, , sizeof(deg));
while(m--){
int u, v;
scanf("%d%d", &u, &v);
g[u].push_back(v);
g[v].push_back(u);
}
cnt=;
dfsClock=;
dfs(, -);
for(int i=; i<=n; ++i){
int len=g[i].size();
for(int j=; j<len; ++j){
int v=g[i][j];
if(low[i]!=low[v])
++deg[low[i]];
}
}
for(int i=; i<=n; ++i)
if(deg[i]==)
++cnt;
printf("%d\n", (cnt+)/);
for(int i=; i<=n; ++i)
g[i].clear();
}
return ;
}
poj 3352Road Construction(无向双连通分量的分解)的更多相关文章
- POJ 3352 Road Construction(边—双连通分量)
http://poj.org/problem?id=3352 题意: 给出一个图,求最少要加多少条边,能把该图变成边—双连通. 思路:双连通分量是没有桥的,dfs一遍,计算出每个结点的low值,如果相 ...
- POJ3352 Road Construction(边双连通分量)
...
- poj 3177 Redundant Paths(边双连通分量+缩点)
链接:http://poj.org/problem?id=3177 题意:有n个牧场,Bessie 要从一个牧场到另一个牧场,要求至少要有2条独立的路可以走.现已有m条路,求至少要新建多少条路,使得任 ...
- Road Construction(无向图的双连通分量)
http://poj.org/problem?id=3352 题意:给出一个有n个顶点m条边的无向连通图,问至少添加几条边,使删除任意一条边原图仍连通. 思路:一个边双连通图删除任意一条边仍为连通图. ...
- POJ 3352-Road Construction (图论-双边联通分支算法)
题目大意:一个图,要求你加入最少的边,使得最后得到的图为一个边双连通分支.所谓的边双连通分支,即不存在桥的连通分支(题目保证数据中任意两点都联通). 解题思路:先用tarjan算法进行缩点建立DAG图 ...
- POJ 3177 Redundant Paths & POJ 3352 Road Construction(双连通分量)
Description In order to get from one of the F (1 <= F <= 5,000) grazing fields (which are numb ...
- POJ 3352 Road Construction (边双连通分量)
题目链接 题意 :有一个景点要修路,但是有些景点只有一条路可达,若是修路的话则有些景点就到不了,所以要临时搭一些路,以保证无论哪条路在修都能让游客到达任何一个景点 思路 :把景点看成点,路看成边,看要 ...
- POJ 3352 无向图边双连通分量,缩点,无重边
为什么写这道题还是因为昨天多校的第二题,是道图论,HDU 4612. 当时拿到题目的时候就知道是道模版题,但是苦于图论太弱.模版都太水,居然找不到. 虽然比赛的时候最后水过了,但是那个模版看的还是一知 ...
- Tarjan算法求解桥和边双连通分量(附POJ 3352 Road Construction解题报告)
http://blog.csdn.net/geniusluzh/article/details/6619575 在说Tarjan算法解决桥和边双连通分量问题之前我们先来回顾一下Tarjan算法是如何 ...
随机推荐
- 8.4.1 ImageLoader
ImageLoader 的工作原理(已经不维护了) 在显示图片的时候,它会先在内存中查找:如果没有,就去本地查找:如果还没有,就开一个新的线程去下载这张图片,下载成功会把图片同时缓存到内存和本地. 基 ...
- sql server 基础语句
创建数据库 创建之前判断该数据库是否存在 if exists (select * from sysdatabases where name='databaseName') drop database ...
- testng参数化及用例排序
http://blog.sina.com.cn/s/blog_6966650401012ra0.html 一.一个简单的测试谷歌搜索 import org.testng.annotations.Tes ...
- 重拾java之路之webservice
Web service平台是一套标准,它定义了应用程序如何在Web上实现互操作性.你可以用任何你喜欢的语言,在任何你喜欢的平台上写Web service ,只要我们可以通过Web servi ...
- stanford-parser使用说明
主意:本说明文档针对stanford-parser-full-2014-06-16.不同版本的parser,其功能和表示形式可能会略有不同.但总体不会有太大差异 Stanford parser是一款较 ...
- linux-10 基本命令之查看内存使用情况- free,history,who,last
free 命令 显示当前系统中内存的使用量情况 格式如下:free[-m/-g] 以m为单位显示当前内存的使用情况 [root@localhost /]# free -m 内存总量 已用量 可用量 ...
- SQL Saturday活动再起
SQL Saturday活动再起 时间:2015年05月09日(星期六) 地点:上海徐汇区港汇2座10楼(10.073) 我们相约港汇2座10楼(10.073),SQL PASS上海分会的SQLSat ...
- mvvm的优势
之前在项目中有个功能,是根据数据模型生成页面,然后页面变动之后,再同步到数据模型之中. 当时用的jquery写的,一点一点的控制,整个功能写下来.测试,花了很长时间,而且还担心出bug. 现在用mvv ...
- AMD加载器实现笔记(三)
上一篇文章中我们为config添加了baseUrl和packages的支持,那么这篇文章中将会看到对shim与paths的支持. 要添加shim与paths,第一要务当然是了解他们的语义与用法.先来看 ...
- ThoughtWorks持续集成平台GO开源了
ThoughtWorks 持续集成平台Go最近宣布开源了.其基于Apache 2.0 开源协议. Go下载地址为http://www.go.cd/download/. 下面是几张来自官方的视图: GO ...