大意:给定一个无向连通图,判断至少加多少的边,才能使任意两点之间至少有两条的独立的路(没有公共的边,但可以经过同一个中间的顶点)。

思路:在同一个双连通分量里的所有的点可以看做一个点,收缩后,新图是一棵树,树的边便是原图的桥。现在问题转化为“在树中至少添加多少条边能使图变成边双连通图”,即添加的边的个数=(树中度为一的节点数目+1)/2,用trajan算法求双联通分量

这是一个模板

 #include<iostream>
#include<cstdio>
#include<string.h>
#include<algorithm>
#include<queue>
#include<vector>
using namespace std;
const int maxn=1e4+;
struct node
{
int v,cut,nxt;
}G[*maxn];
int cnt;
int head[maxn];
int Stack[maxn];
int instack[maxn];
int low[maxn],dfn[maxn];
int belong[maxn],du[maxn];
int block,index;
int bridge,top;
void init()
{
cnt=;
memset(head,-,sizeof(head));
}
void build(int u,int v)
{
G[cnt].v=v;G[cnt].nxt=head[u];G[cnt].cut=;head[u]=cnt++;
}
void tarjan(int u,int pre)
{
low[u]=dfn[u]=++index;
Stack[top++]=u;
instack[u]=;
int v;
for(int i=head[u];i!=-;i=G[i].nxt){
v=G[i].v;
if(pre==v) continue;
if(!dfn[v]){
tarjan(v,u);
low[u]=min(low[u],low[v]);
if(low[v]>dfn[u]){
bridge++;
G[i].cut=;
G[i^].cut=;
}
}
else if(low[u]>dfn[v]&&instack[v]) low[u]=dfn[v];
}
if(low[u]==dfn[u]){
block++;
do{
v=Stack[--top];
instack[v]=;
belong[v]=block;
}while(v!=u);
}
}
void solve(int n)
{
int i,j;
int index=;
bridge=;
top=;
block=;
memset(low,,sizeof(low));
memset(dfn,,sizeof(dfn));
memset(belong,,sizeof(belong));
memset(instack,,sizeof(instack));
tarjan(,);
for(i=;i<=n;i++){
for(j=;j!=-;j=G[j].nxt){
if(G[j].cut)
du[belong[i]]++;
}
}
int ans=;
for(i=;i<=block;i++){
if(du[i]==)
ans++;
}
printf("%d\n",(ans+)/);
}
int main()
{
int n,m;
while(~scanf("%d%d",&n,&m)){
init();
for(int i=;i<m;i++){
int u,v;
scanf("%d%d",&u,&v);
build(u,v);
build(v,u);
}
solve(n);
}
return ;
}

最新文章

  1. Python类属性,实例属性
  2. UVa572 Oil Deposits DFS求连通块
  3. 如何安装Git到MAC OS X
  4. FusionCharts报错
  5. 菜鸟如何反转到资深Web安全工程师
  6. Java开发笔记(十)一元运算符的技巧
  7. ALTER SYSTEM ARCHIVELOG CURRENT挂起案例
  8. SQL Server &quot;允许远程连接到此服务器&quot; 配置
  9. linux 学习笔记 groupadd创建组
  10. emmc基础技术8:操作模式3-interrupt mode
  11. hdu2888 二维ST表(RMQ)
  12. 部署Java项目到阿里云服务器主机
  13. 安全测试6_Web安全工具第一节(浏览器入门及扩展)
  14. SQL Server还原数据库
  15. Spark Sort-Based Shuffle具体实现内幕和源码详解
  16. Linux命令详解-Apache网站服务器配置和管理
  17. BZOJ5324 JXOI2018守卫(区间dp)
  18. Android Studio 3.0 下载 使用新功能介绍
  19. python练习笔记——求三位的水仙花数
  20. Mate20兼容性如何?WeTest带你抢先测!

热门文章

  1. 软件架构期末复习(Struts2+Spring+Hibernate)
  2. 大二上学期Javaweb阶段性学习总结
  3. [AtCoder Code Festival 2017 QualB D/At3575] 101 to 010 - dp
  4. Vue.js 源码目录设计(二)
  5. pymysql模块学习
  6. 笔记本u盘插上不显示
  7. this 的值到底是什么?一次说清楚
  8. eclipse 设置不弹出debug调试框
  9. JAVA 注解教程(一)简单介绍
  10. 显示目录文件命令 - ls