Description

给出一个无向图,求将他构造成双连通图所需加的最少边数.

Sol

Tarjan求割边+缩点.

求出割边,然后缩点.

将双连通分量缩成一个点,然后重建图,建出来的就是一棵树,因为每一条边都是桥.

然后每次合并这棵树上的叶节点两点距离LCA最远的点,这样就会形成一个环,是双连通的,然后进行(ans+1)/2次操作就可以了.

其实就是(叶节点个数+1)/2

Code

#include<cstdio>
#include<vector>
#include<iostream>
using namespace std; const int N = 5005;
const int M = 10005;
#define debug(a) cout<<#a<<"="<<a<<" " int n,m,cnt,bcnt,ans;
struct Edge{ int fr,to,id; }edge[M];
vector<Edge> g[N];
int dfsn[N],low[N],e[N],vis[N],b[N],du[N]; inline int in(int x=0,char ch=getchar()){ while(ch>'9'||ch<'0') ch=getchar();
while(ch>='0'&&ch<='9') x=(x<<3)+(x<<1)+ch-'0',ch=getchar();return x; }
void Add_Edge(int u,int v,int id){
edge[id]=(Edge){ u,v,id };
g[u].push_back((Edge){ u,v,id });
g[v].push_back((Edge){ v,u,id });
}
void Tarjan(int u,int fa){
dfsn[u]=low[u]=++cnt;
for(int i=0,lim=g[u].size(),v;i<lim;i++) if((v=g[u][i].to)!=fa){
if(!dfsn[v]){
Tarjan(v,u),low[u]=min(low[u],low[v]);
if(low[v]>dfsn[u]) e[g[u][i].id]=1;
}else low[u]=min(low[u],dfsn[v]);
}
}
void DFS(int u,int bl){
b[u]=bl,vis[u]=1;
for(int i=0,lim=g[u].size(),v;i<lim;i++) if(!e[g[u][i].id]&&!vis[v=g[u][i].to]) DFS(v,bl);
}
int main(){
// freopen("in.in","r",stdin);
n=in(),m=in();
for(int i=1,u,v;i<=m;i++) u=in(),v=in(),Add_Edge(u,v,i);
Tarjan(1,0);
for(int i=1;i<=n;i++) if(!b[i]) DFS(i,++bcnt);
for(int i=1,u,v;i<=m;i++){
u=edge[i].fr,v=edge[i].to;
if(b[u]!=b[v]) du[b[u]]++,du[b[v]]++;
}
for(int i=1;i<=bcnt;i++) if(du[i]==1) ans++; // debug(n),debug(m);
// for(int i=1;i<=n;i++) debug(i),debug(dfsn[i]),debug(low[i])<<endl;
// for(int i=1;i<=m;i++) if(e[i]) cout<<i<<" ";cout<<endl;
// debug(ans),debug(bcnt)<<endl; cout<<(ans+1)/2<<endl;
return 0;
}

  

BZOJ 1718: [Usaco2006 Jan] Redundant Paths 分离的路径的更多相关文章

  1. BZOJ 1718: [Usaco2006 Jan] Redundant Paths 分离的路径( tarjan )

    tarjan求边双连通分量, 然后就是一棵树了, 可以各种乱搞... ----------------------------------------------------------------- ...

  2. bzoj 1718: [Usaco2006 Jan] Redundant Paths 分离的路径【tarjan】

    首先来分析一下,这是一张无向图,要求没有两条路联通的点对个数 有两条路连通,无向图,也就是说,问题转化为不在一个点双连通分量里的点对个数 tarjan即可,和求scc还不太一样-- #include& ...

  3. 【BZOJ】1718: [Usaco2006 Jan] Redundant Paths 分离的路径

    [题意]给定无向连通图,要求添加最少的边使全图变成边双连通分量. [算法]Tarjan缩点 [题解]首先边双缩点,得到一棵树(无向无环图). 入度为1的点就是叶子,两个LCA为根的叶子间合并最高效,直 ...

  4. [Usaco2006 Jan] Redundant Paths 分离的路径

    1718: [Usaco2006 Jan] Redundant Paths 分离的路径 Time Limit: 5 Sec  Memory Limit: 64 MBSubmit: 1132  Solv ...

  5. [BZOJ1718]:[Usaco2006 Jan] Redundant Paths 分离的路径(塔尖)

    题目传送门 题目描述 为了从F个草场中的一个走到另一个,贝茜和她的同伴们有时不得不路过一些她们讨厌的可怕的树.奶牛们已经厌倦了被迫走某一条路,所以她们想建一些新路,使每一对草场之间都会至少有两条相互分 ...

  6. BZOJ1718 [Usaco2006 Jan] Redundant Paths 分离的路径

    给你一个无向图,问至少加几条边可以使整个图变成一个双联通分量 简单图论练习= = 先缩点,ans = (度数为1的点的个数) / 2 这不是很好想的么QAQ 然后注意位运算的优先级啊魂淡!!!你个sb ...

  7. BZOJ1718: [Usaco2006 Jan] Redundant Paths 分离的路径【边双模板】【傻逼题】

    LINK 经典傻逼套路 就是把所有边双缩点之后叶子节点的个数 //Author: dream_maker #include<bits/stdc++.h> using namespace s ...

  8. 【bzoj1718】Redundant Paths 分离的路径

    1718: [Usaco2006 Jan] Redundant Paths 分离的路径 Time Limit: 5 Sec  Memory Limit: 64 MBSubmit: 964  Solve ...

  9. Redundant Paths 分离的路径【边双连通分量】

    Redundant Paths 分离的路径 题目描述 In order to get from one of the F (1 <= F <= 5,000) grazing fields ...

随机推荐

  1. vim 快捷键 以及技巧

    [root@centos01 biji]# vim + 1.txt 打开文件,光标定位到最后一行[root@centos01 biji]# vim +5 1.txt 打开文件,光标定位到第5行[roo ...

  2. JAVA第三周课后作业

    JAVA课后作业 一.枚举类型 代码: enum Size{SMALL,MEDIUM,LARGE}; public cl ass EnumTest { public static void main( ...

  3. nginx的简单操作

    1.今天在nginx下访问403,发现图片访问出现403,其他没有问题,看来下图片的文件夹没有读写的权限,修改下权限就OK了! 2.重启nginx 在env/nginx/sbin目录下输入:nginx ...

  4. Unity Shader Lab

    http://docs.unity3d.com/460/Documentation/Manual/SL-BuiltinValues.html http://docs.unity3d.com/Manua ...

  5. HighCharts学习笔记(二)HighCharts结构及详细配置

    HighCharts结构及详细配置: 一.HighCharts整体结构: 通过查看API文档我们知道HighCharts结构如下:(API文档在文章后面提供下载) var chart = new Hi ...

  6. 深入理解docker的link机制

    https://yq.aliyun.com/articles/55912 摘要: 什么是docker的link机制 同一个宿主机上的多个docker容器之间如果想进行通信,可以通过使用容器的ip地址来 ...

  7. 常用JS效果 不断进步贴 不停更新~ 纪念用~

    常用效果 JS  都是Jquery  没有特殊说明 1.选项卡  用的JQuery  以后学好点再来对比 看下 /* * @parent 最外层父级元素 * @EventElement 触发事件元素 ...

  8. 开源项目管理平台*redmine*的架设

    yum -y install ruby yum install rubygems gem install heroku gem install rack -v=1.0.1 gem install ru ...

  9. 做技术最自由,在IT最幸福!

    这些天来,一直感觉"做技术最自由,在IT最幸福!" 在IT最幸福 一直感觉从事IT行业最幸福,想想那些干机械的.干汽修.地勤的,让我干那些工作,对我来说真是折磨! 大体总结以下几点 ...

  10. Sublime Text 2 快捷键 (windows)

    转自:http://istyles.blog.163.com/blog/static/1811003892011828111418654/ Lucifr翻译了 Sublime Text 2 快捷键 M ...