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 ...
随机推荐
- python 多线程学习
多线程(multithreaded,MT),是指从软件或者硬件上实现多个线程并发执行的技术 什么是进程? 计算机程序只不过是磁盘中可执行的二进制(或其他类型)的数据.它们只有在被读取到内存中,被操作系 ...
- ubuntu网络设置
修改/etc/network/interfaces文件sudo gedit /etc/network/interfaces 贴出我的eth0设置,自己看情况修改:# The primary netwo ...
- Python之路【第十四篇】前端补充回顾
布局和事件 1.布局 首先看下下面的图片: 上面的内容都是居中的,怎么实现这个效果呢,第一种方法是通过float的方式,第二种是通过“div居中的方式” 第一种方式不在复述了,直接看第二种方式: 1. ...
- Orchard源码分析(3):Orchard.WarmupStarter程序集
概述 Orchard.WarmupStarter程序集包含三个类:WarmupUtility.WarmupHttpModule和Starter<T>.该程序集主要为Orchard应用启动初 ...
- Cool Sites
尽快学习完成这个网页 https://www.sitepoint.com/php-security-cross-site-scripting-attacks-xss/ https://msdn.mic ...
- Eclipse闪退无法打开的解决方法
使用Eclipse过程中但是有时会出现打不开闪退的情况,这是为什么呢,遇到这种情况怎么解决.东坡小编通过查找资料,发现如下方法可以解决eclipse打不开闪退,具体操作如下: Eclipse打不开闪退 ...
- Xshell4注册码,Xftp注册码
Xshell 是一个强大的安全终端模拟软件,商业版注册码如下: Xshell 4 注册码: 690313-111999-999313 Xftp 4 注册码:101210-450789-147200 X ...
- HTML5+CSS3+jquery实现简单的音乐播放器
...最近天热的,感觉就像煎饼...然后别人在把妹子的时候,只有偶们这帮苦逼的程序员在那边撸代码...我日哦! 然后今天晒的是偶早年写的一个播放器...看上去是不是很有感觉的样子!一番宝物,Lisa唱 ...
- seo是什么职业
SEO(Search Engine Optimization)汉译为搜索引擎优化.seo从业者首要工作就是优化网站,使其符合搜索引擎的基本规律和满足用户的需求,进而获得大量的用户访问.SEO职业属于一 ...
- ASP FORM表单提交判断
ASP提交表单是先进行Form填写检测,检测完成没问题之后再执行写入数据库表操作. 相关源码: <script language="javascript"> funct ...