博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
poj 3352 Road Construction(点双连通分量缩点+缩点树变为双连通分量)
阅读量:3713 次
发布时间:2019-05-21

本文共 1561 字,大约阅读时间需要 5 分钟。

题目链接:

题目大意:

给出一张图,问最少加多少条边,将他变成边双连通图

题目分析:

首先进行点双连通图缩点,(点双连通图一定是边双连通图),然后得到一棵树,对于一棵树,我们只需要知道树的最底层有多少个点,然后将他们两两连接即可,那么所有的点就至少有两条路径到达,因为树的两条链相连就变成了环,环路就是路径上的点都有两条路径到达,然后很轻易的就能得到结果,缩点什么的早就是模板了

代码如下:

#include 
#include
#include
#include
#include
#include
#include
#define MAX 1007using namespace std;int n,m,u,v;int dfn[MAX],low[MAX],b[MAX],times,cnt;int in[MAX];typedef pair
pii;stack
s;vector
e[MAX];map
mp;void tarjan ( int u , int p ){ dfn[u] = low[u] = ++times; s.push ( u ); int len = e[u].size(); for ( int i = 0 ; i < len ; i++ ) { int v = e[u][i]; if ( v == p ) continue; if ( !dfn[v] ) { tarjan ( v , u ); low[u] = min ( low[u] , low[v] ); } else low[u] = min ( low[u] , dfn[v] ); } if ( low[u] == dfn[u] ) { int temp; do { temp = s.top(); b[temp] = cnt; s.pop(); }while ( temp != u ); cnt++; }}void init ( ){ for ( int i = 0 ; i < MAX ; i++ ) e[i].clear(); while ( !s.empty()) s.pop(); times = cnt = 0; mp.clear(); memset ( in , 0 , sizeof ( in ));}int main ( ){ while ( ~scanf ( "%d%d" , &n , &m ) ) { init(); while ( m-- ) { scanf ( "%d%d" , &u , &v ); e[u].push_back ( v ); e[v].push_back ( u ); } for ( int i = 1 ; i <= n ; i++ ) if ( !dfn[i] ) tarjan ( i ,-1 ); for ( int i = 1 ; i <= n ; i++ ) { int len = e[i].size(); for ( int j = 0 ; j < len ; j++ ) { int v = e[i][j]; if ( b[i] == b[v] ) continue; if ( mp[make_pair(i,v)] ) continue; mp[make_pair(i,v)] = true; in[b[v]]++; } } int ans = 0; for ( int i = 0 ; i < cnt ; i++ ) if ( in[i] == 1 ) ans++; printf ( "%d\n" , (ans+1)/2 ); }}

转载地址:http://rpvjn.baihongyu.com/

你可能感兴趣的文章
数据结构 图(二)社交网络
查看>>
网络安全之HTTP协议
查看>>
计算机网络 网络概述
查看>>
合同法律风险管理 静态合同的主体
查看>>
合同法律风险管理 静态合同的序言与内容
查看>>
计算机网络 计算机网络类别与性能
查看>>
计算机网络 计算机网络体系结构 协议与层次
查看>>
合同法律风险管理 静态合同的附则与附件
查看>>
Python爬虫 socket库应用详解
查看>>
Python爬虫 socket库详解及实践全部相关代码
查看>>
Python爬虫 socket库实践——模拟连接发送接收数据
查看>>
eclipse报错 The superclass "javax.servlet.http.HttpServlet" was not found on the Java Build Path
查看>>
Python爬虫 multiprocessing库应用详解
查看>>
Python爬虫 threading库应用详解
查看>>
计算机网络 物理层 概念与技术
查看>>
合同法律风险管理 动态合同履约衔接与函件往来
查看>>
合同法律风险管理 动态合同债权风险控制与合同权利期限
查看>>
网络安全之进程与线程
查看>>
民法学习入门的“听说读写”之道
查看>>
Python爬虫 multiprocessing库实践——进程模拟
查看>>