BZOJ 1718: [Usaco2006 Jan] Redundant Paths 分离的路径
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 分离的路径的更多相关文章
- BZOJ 1718: [Usaco2006 Jan] Redundant Paths 分离的路径( tarjan )
tarjan求边双连通分量, 然后就是一棵树了, 可以各种乱搞... ----------------------------------------------------------------- ...
- bzoj 1718: [Usaco2006 Jan] Redundant Paths 分离的路径【tarjan】
首先来分析一下,这是一张无向图,要求没有两条路联通的点对个数 有两条路连通,无向图,也就是说,问题转化为不在一个点双连通分量里的点对个数 tarjan即可,和求scc还不太一样-- #include& ...
- 【BZOJ】1718: [Usaco2006 Jan] Redundant Paths 分离的路径
[题意]给定无向连通图,要求添加最少的边使全图变成边双连通分量. [算法]Tarjan缩点 [题解]首先边双缩点,得到一棵树(无向无环图). 入度为1的点就是叶子,两个LCA为根的叶子间合并最高效,直 ...
- [Usaco2006 Jan] Redundant Paths 分离的路径
1718: [Usaco2006 Jan] Redundant Paths 分离的路径 Time Limit: 5 Sec Memory Limit: 64 MBSubmit: 1132 Solv ...
- [BZOJ1718]:[Usaco2006 Jan] Redundant Paths 分离的路径(塔尖)
题目传送门 题目描述 为了从F个草场中的一个走到另一个,贝茜和她的同伴们有时不得不路过一些她们讨厌的可怕的树.奶牛们已经厌倦了被迫走某一条路,所以她们想建一些新路,使每一对草场之间都会至少有两条相互分 ...
- BZOJ1718 [Usaco2006 Jan] Redundant Paths 分离的路径
给你一个无向图,问至少加几条边可以使整个图变成一个双联通分量 简单图论练习= = 先缩点,ans = (度数为1的点的个数) / 2 这不是很好想的么QAQ 然后注意位运算的优先级啊魂淡!!!你个sb ...
- BZOJ1718: [Usaco2006 Jan] Redundant Paths 分离的路径【边双模板】【傻逼题】
LINK 经典傻逼套路 就是把所有边双缩点之后叶子节点的个数 //Author: dream_maker #include<bits/stdc++.h> using namespace s ...
- 【bzoj1718】Redundant Paths 分离的路径
1718: [Usaco2006 Jan] Redundant Paths 分离的路径 Time Limit: 5 Sec Memory Limit: 64 MBSubmit: 964 Solve ...
- Redundant Paths 分离的路径【边双连通分量】
Redundant Paths 分离的路径 题目描述 In order to get from one of the F (1 <= F <= 5,000) grazing fields ...
随机推荐
- wordpress后台404页面
就在刚刚,boss需要看公司网站后台,网站是用wordpress搭的,发现全是404,蛋疼,于是google,下面是解决办法: location / { if (-f $request_filenam ...
- OpenGL瓶颈
在优化Erya3D引擎的过程中,遇到的瓶颈: 1. 字符串操作,避免逐个字符的比较,使用哈希码比较2. 贴图操作:切换绑定贴图.更改贴图参数3. 切换绑定GLSL程序4. Draw Call:http ...
- 修改 页面中默认的select样式
select样式定制: select { /*Chrome和Firefox里面的边框是不一样的,所以复写了一下*/ border: solid 1px #000; /*很关键:将默认的select选择 ...
- yourphp 的 ThinkTemplate.class.php与ContentReplaceBehavior.class.php
ThinkTemplate.class.php :去掉版权(针对html代码) ContentReplaceBehavior.class.php:一些默认标签的路劲,如:__PUBLIC__,../P ...
- 如何让Chrome浏览器可以加载本地XML文件?
Chrome浏览器的安全限制,禁止本地加载XML等外部文件,如何设置让其可以加载呢? 有两种方法,第一种是在本地服务器环境下浏览,采用 http://localhost/ 的方式浏览你的网页和文件,就 ...
- DELL服务器引导光盘图片及下载链接
DELL服务器引导光盘图片及下载链接 所有的下载地址均是ftp开头的,下载时,请 拷贝下载地址,然后放到浏览器的地址栏进行下载! 各个下载地址汇总: http://search.dell.com/re ...
- ElasticSearch之二——集群
ElasticSearch 集群 首先看下ElasticSearch(ES)的架构: 术语解释: cluster:代表一个集群,集群中有多个节点,其中有一个master节点,master通过选举自动产 ...
- CSS立体标签实现
<style> .tag { background-color: #de3f33; position: relative; text-align: center; color: #fff; ...
- IOS开发中@2x图片等适应不同分辨率手机
开发中,例如: nanshanImage.image=[UIImage imageNamed:@'index_pic.png']; 在项目中还保存中index_pic@2x.png的图片,此图为了只适 ...
- Xcode常用技巧(2)-使Xcode在创建类时自动添加前缀
在Xcode5之前的版本中,Xcode在新建项目时,会要求为一个类指定一个前缀,这样方便我们区分相同名字的类.而从Xcode6开始,由于Swift增加了命名空间的关系,Xcode在新建项目时,不会再要 ...