边双连通分量 jarjan (poj 3177)
大意:给定一个无向连通图,判断至少加多少的边,才能使任意两点之间至少有两条的独立的路(没有公共的边,但可以经过同一个中间的顶点)。
思路:在同一个双连通分量里的所有的点可以看做一个点,收缩后,新图是一棵树,树的边便是原图的桥。现在问题转化为“在树中至少添加多少条边能使图变成边双连通图”,即添加的边的个数=(树中度为一的节点数目+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 ;
}
边双连通分量 jarjan (poj 3177)的更多相关文章
- poj 3177 Redundant Paths(边双连通分量+缩点)
链接:http://poj.org/problem?id=3177 题意:有n个牧场,Bessie 要从一个牧场到另一个牧场,要求至少要有2条独立的路可以走.现已有m条路,求至少要新建多少条路,使得任 ...
- POJ 3177 Redundant Paths(边双连通分量)
[题目链接] http://poj.org/problem?id=3177 [题目大意] 给出一张图,问增加几条边,使得整张图构成双连通分量 [题解] 首先我们对图进行双连通分量缩点, 那么问题就转化 ...
- POJ 3177 Redundant Paths (tarjan边双连通分量)
题目连接:http://poj.org/problem?id=3177 题目大意是给定一些牧场,牧场和牧场之间可能存在道路相连,要求从一个牧场到另一个牧场要有至少两条以上不同的路径,且路径的每条pat ...
- POJ 3177 Redundant Paths (桥,边双连通分量,有重边)
题意:给一个无向图,问需要补多少条边才可以让整个图变成[边双连通图],即任意两个点对之间的一条路径全垮掉,这两个点对仍可以通过其他路径而互通. 思路:POJ 3352的升级版,听说这个图会给重边.先看 ...
- POJ 3177 Redundant Paths & POJ 3352 Road Construction(双连通分量)
Description In order to get from one of the F (1 <= F <= 5,000) grazing fields (which are numb ...
- 【POJ 3177】Redundant Paths(边双连通分量)
求出每个边双连通分量缩点后的度,度为1的点即叶子节点.原图加上(leaf+1)/2条边即可变成双连通图. #include <cstdio> #include <cstring> ...
- [双连通分量] POJ 3177 Redundant Paths
Redundant Paths Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 13712 Accepted: 5821 ...
- tarjan算法求桥双连通分量 POJ 3177 Redundant Paths
POJ 3177 Redundant Paths Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 12598 Accept ...
- Redundant Paths POJ - 3177(边—双连通分量)
题意: 在图中加边 看最少能通过加多少条边把 图变成边—双连通分量 解析: 先做一次dfs,不同的连通分量的low是不同的 注意重边 缩点 统计度为1的点 那么需要加的边为(ret+1)/2 #i ...
随机推荐
- AC认证技术
一.认证方式 Dkey认证(数字密钥认证) 1)免认证key,形同usb,插入即通过认证 2)免审计key,也是上网不被记录审计. 单点登录 登录了某点,其他点都能访问:例如登录了支付宝淘宝就不用登录 ...
- 数据预处理 | 使用 pandas.to_datetime 处理时间类型的数据
数据中包含日期.时间类型的数据可以通过 pandas 的 to_datetime 转换成 datetime 类型,方便提取各种时间信息 1 将 object 类型数据转成 datetime64 1&g ...
- linux执行计划任务at命令
https://www.jianshu.com/p/17f5aa01853f 在linux计划任务中, cron 是周期性运行某任务,假如我只想在未来的某时间点只是要求任务运行一次,这就用到at命令了 ...
- linux 安装 Django
安装django的命令 pip install Django ## 这样运行默认安装的是最新版 备注 根据测试在python3.4基础上安装Django 1.8.9正式版是没有问题的,所以要执行下面命 ...
- Windows DOS下查看硬盘分区
运行cmd Diskpart //加载 list Disk //列出硬盘 list Volume //列出分区 Select Disk //选择 编号0的硬盘 list Partition //列出当 ...
- Java 面向对象编程 抽象类 抽象方法 abstract
抽象类 通过abstract定义的方法是抽象方法,它只有定义,没有实现.抽象方法定义了子类必须实现的接口规范: 定义了抽象方法的class必须被定义为抽象类,从抽象类继承的子类必须实现抽象方法: 如果 ...
- zabbix4.2配置监控nginx服务
1.监控原理 通过status模块监控(--with-http_stub_status_module) 2.修改nginx配置(/etc/nginx/conf.d/default.conf) 在被监 ...
- [HDU4609] 3-idiots - 多项式乘法,FFT
题意:有\(n\)个正整数,求随机选取一个3组合,能构成三角形的概率. Solution: 很容易想到构造权值序列,对其卷积得到任取两条边(可重复)总长度为某数时的方案数序列,我们希望将它转化为两条边 ...
- ORA-04089: cannot create triggers on objects owned by SYS
04089 问题原因 因为你在以sys用户创建触发器,但oracle却不建议在sys用户下创建触发器.
- Mybatis-对数据库的关联查询
由于MyBatis逆向工程生成的代码只能进行对单表的操作(功能已经很强大了),但是远远不能满足开发的需要,下面就简单讲解下MyBatis进行关联查询的简单案例. 一.一对一关联查询 1 ...