poj 3352 双连通分量

POJ 3352 浅谈边双连通分量缩点 世界真的很大 刚刚才刷了一道边双连通的Tarjan 感觉不够,迅速再敲一道练手 然后1A,哇哇哇哇 虽然是一道水题,但我自己不会说出来233看题先:description: 给定图G,求最少加多少边可以成为双连通图。 input: The first line of input will consist of positive integers n and r, separated 阅读详情

Road Construction
Time Limit: 2000MS Memory Limit: 65536K
Total Submissions: 9542 Accepted: 4739

Description

It's almost summer time, and that means that it's almost summer construction time! This year, the good people who are in charge of the roads on the tropical island paradise of Remote Island would like to repair and upgrade the various roads that lead between the various tourist attractions on the island.

The roads themselves are also rather interesting. Due to the strange customs of the island, the roads are arranged so that they never meet at intersections, but rather pass over or under each other using bridges and tunnels. In this way, each road runs between two specific tourist attractions, so that the tourists do not become irreparably lost.

Unfortunately, given the nature of the repairs and upgrades needed on each road, when the construction company works on a particular road, it is unusable in either direction. This could cause a problem if it becomes impossible to travel between two tourist attractions, even if the construction company works on only one road at any particular time.

So, the Road Department of Remote Island has decided to call upon your consulting services to help remedy this problem. It has been decided that new roads will have to be built between the various attractions in such a way that in the final configuration, if any one road is undergoing construction, it would still be possible to travel between any two tourist attractions using the remaining roads. Your task is to find the minimum number of new roads necessary.

Input

The first line of input will consist of positive integers n and r, separated by a space, where 3 ≤ n ≤ 1000 is the number of tourist attractions on the island, and 2 ≤ r ≤ 1000 is the number of roads. The tourist attractions are conveniently labelled from 1 to n. Each of the following r lines will consist of two integers, v and w, separated by a space, indicating that a road exists between the attractions labelled v and w. Note that you may travel in either direction down each road, and any pair of tourist attractions will have at most one road directly between them. Also, you are assured that in the current configuration, it is possible to travel between any two tourist attractions.

Output

One line, consisting of an integer, which gives the minimum number of roads that we need to add.

Sample Input

Sample Input 1
10 12
1 2
1 3
1 4
2 5
2 6
5 6
3 7
3 8
7 8
4 9
4 10
9 10

Sample Input 2
3 3
1 2
2 3
1 3

Sample Output

Output for Sample Input 1
2

Output for Sample Input 2
0

Source


求出图的边双连通分量和割边的个数。将一个图补全为边双连通需要的点数是 (leaf+1)/2(leaf是缩点后图中叶子节点个数,即度数为1)。找出割边后,利用割边求出每个边双连通分量的度数,并统计度数为1的点个数。

#include <iostream>
#include <cstring>
#include <cstdio>
#include <vector>
#include <stack>

using namespace std;

#define maxn 1005
struct edge
{
    int v, rev, flag;
    edge(){};
    edge(int a, int b){ v=a; rev=b; flag=false;}
};
vector<edge> g[maxn];
int low[maxn],dfn[maxn], in[maxn];
int belong[maxn],deg[maxn];
stack<int> s;
int n,m, scc;

void init()
{
    for(int i=0; i<maxn; i++)g[i].clear();
    memset(dfn, 0, sizeof(dfn));
    memset(in, 0, sizeof(in));
    memset(deg, 0, sizeof(deg));
    while(!s.empty()) s.pop();
    scc=0;
}
void add(int u, int v)
{
    g[u].push_back(edge(v, g[v].size()));
    g[v].push_back(edge(u, g[u].size()-1));
}


void tarjan(int u, int par, int &cnt)
{
    dfn[u]=low[u]=++cnt;
    s.push(u); in[u]=1;
    int v;
    for(int i=0; i<g[u].size(); i++){
        v=g[u][i].v;
        if(!dfn[v]){
            tarjan(v, u, cnt);
            low[u]=min(low[v], low[u]);
            if(low[v]>dfn[u]){
                g[u][i].flag=true;
                g[v][g[u][i].rev].flag=true;
            }
        }
        else if(in[v] && v!=par) low[u]=min(dfn[v], low[u]);
    }

    if(low[u]==dfn[u]){
        scc++;
        do{
            v=s.top(); s.pop();
            belong[v]=scc;
            in[v]=false;
        }while(v!=u);
    }

}



int main()
{
    while(scanf("%d%d", &n, &m)==2){
        init();

        int u,v;
        for(int i=0; i<m; i++){
            scanf("%d%d", &u, &v);
            add(u,v);
        }

        int tot=0;
        for(int i=1; i<=n; i++)
            if(!dfn[i])
            tarjan(1, -1, tot);


        int vis[maxn];

        for(int u=1; u<=n; u++){
            int v;
            memset(vis, 0, sizeof(vis));
            for(int i=0; i<g[u].size(); i++){
                v=g[u][i].v;

                if(!g[u][i].flag||belong[u]==belong[v] || vis[belong[v]] || v<u) continue;
                deg[belong[v]]++; deg[belong[u]]++;
                vis[belong[v]]=1;
            }
        }

        int ans=0;
        for(int i=1; i<=scc; i++)
            if(deg[i]==1) ans++;
        cout<<(ans+1)/2<<endl;

    }
    return 0;
}


[双连通分量]poj 3352 Road Construction /** [双连通分量]poj 3352 Road Construction 题意,求一个无向图至少要添加几条边才能成为边双连通图。 1,考虑一棵树,至少要添加(d1 + 1) / 2条边 (d1为度为1的节点数目) 2,将原图中的变连通分量缩点构造一棵树。(相同low值得点在同一个边联通分量中) */ #include #include #include #include using n 阅读详情

相关推荐

POJ3352-Road Construction 【Tarjan-边双连通分量-缩点】

POJ3352-Road Construction 【Tarjan-边双连通分量-缩点】 解题报告+AC代码 http://hi.youkuaiyun.com/!s/0T8UO5 附:我所有的POJ解题报告链接 . http://blog.youkuaiyun.com/lyy289065406/article/details/6642573

poj3352 Road Construction 缩点

有时根据问题的需要,要把边双连通分量抽象为一个点,这就叫缩点。   缩点的根据也是low值;同一边双连通分量的点,low值相同,因为对于该边双连通分量dfs树上的根节点u和其子孙节点v,它们之间除了有一条dfs树边组成的路径之外,肯定还有一条包含回边的路径,所以每个点v都能通过一条非dfs树上的路径到达u点,即所有的low[v]=u;   经过缩点后的无向图是一棵树(树的每一条边都是割边)

emmmmmm 2502

Petalinux 2021.1 + Vivado 2021 实战:手把手教你为Zynq板卡移植Linux并搞定AXI DMA驱动

本文详细介绍了基于Petalinux 2021.1和Vivado 2021工具链,为Zynq开发板移植Linux系统并开发AXI DMA驱动的全流程。从环境配置、硬件设计到驱动适配与性能优化,提供了实战避坑技巧和版本特异性问题的解决方案,帮助开发者快速构建高速数据传输系统。

weixin_42641741的博客 386

poj 3352(边双连通分量)

题目链接:http://poj.org/problem?id=3352 思路:可以求出所有的桥,把桥删掉。然后把所有的连通分支求出来,显然这些连通分支就是原图中的双连通分支。把它们缩成点,然后添上刚才删去的桥,就构成了一棵树。在树上添边使得树变成一个双连通分支即可,这里我们可以直接统计缩点后的叶子节点个数即可,从而要加的边数即为(叶子节点个数+1)/2. 1 #include&lt;...

weixin_33804990的博客 190

FairyGUI编辑器自定义菜单扩展插件

本文涉及到的软件有:FairyGUI,VSCode代码环境涉及到了:LuaVSCode插件:EmmyLua在编写FairyGUI编辑器菜单前,了解一下FairyGUIEditor的API会有效的帮助我们解决很多问题。FairyGUI的扩展是通过编辑器自带的插件功能实现的,插件中我使用的是lua环境模板。导入编辑器的LuaAPI,文件可以在FairyGUI-Editor源码的插件目录中找到。接下来将通过功能来说明对应的API作用。

Aili_Xiao的博客 4496

大模型越狱指令数据集全解析:从AdvBench到HarmBench

本文全面解析了AdvBench、HarmBench等主流大模型越狱指令数据集。AdvBench作为基础测试集,用于快速评估模型安全基线;HarmBench则以其全面的文本、多模态及对抗性攻击评估,成为当前权威的深度安全审计工具。文章还介绍了MaliciousInstruct、JailbreakBench等特色数据集,并提供了根据实际场景选择与使用这些数据集的具体实战指南。

weixin_29327525的博客 616

poj 3352(tarjan)

传送门 题意:加最少的边使原图(保证所有点连通)成为一个边-双连通图。 题解:用tarjan求双连通分量缩点(形成一棵无根树)后计算度数为1的节点(叶节点)的个数为cnt,那么答案为(cnt+1)/2。下面是证明:首先把两个最近公共祖先最远的两个叶节点之间连接一条边,这样可以把这两个点到祖先的路径上所有点收缩到一起,因为一个形成的环一定是双连通的。然后再找两个最近公共祖先最远的两个叶节点,这样一

KGV093的博客 389

探针卡技术演进:从金线微针到MEMS探针的Wafer Sort革命

本文探讨了探针卡技术从传统金线微针到MEMS探针的演进,及其对晶圆测试(Wafer Sort)的革命性影响。随着芯片焊垫间距进入45微米以下,MEMS技术凭借其超高精度、超长寿命和卓越的信号完整性,成为应对高密度、高速及3D IC测试挑战的关键,显著提升了测试效率与稳定性。

lstm7chronicler的博客 365

poj 3352--Road Construction(双连通分量)

题意:给定一无向连通图

dingzuoer的专栏 400

腾讯ACE反作弊系统:内核驱动与AI行为分析如何守护游戏公平

在游戏安全领域,反作弊技术是保障公平竞技环境的核心防线。其基本原理是通过监控系统关键行为,识别并阻断非法的第三方程序干预。从技术实现看,现代反作弊方案普遍采用分层防御架构,结合用户态模块进行应用层检测,并依赖内核态驱动实现底层深度监控,以此构建纵深防御体系。这种技术的核心价值在于,它能有效对抗从简单内存修改到高级驱动级作弊等多种威胁,维护游戏经济系统和玩家体验的完整性。随着作弊手段的演进,行为分析与AI赋能变得至关重要,系统通过机器学习模型分析进程行为序列的异常模式,即使面对未知特征的外挂变种也能进行有效识

weixin_33978578的博客 741

Tinder养号防封攻略来了:最新Tinder养号流程和运营攻略

今天,我就来给大家分享一下Tinder养号的具体操作,以及针对Tinder账号被封的一些常见问题为大家做个答疑。

m0_67768117的博客 2万+

poj 3352 Road Construction (双连通)

It's almost summer time, and that means that it's almost summer construction time! This year, the good people who are in charge of the roads on the tropical island paradise of Remote Island would like

MR CODER 758

【报错解决】彻底解决 CondaHTTPError: HTTP 000 CONNECTION FAILED for url 报错

CondaHTTPError: HTTP 000 CONNECTION FAILED for url 错误本质上是由于 Conda 无法访问远程仓库引起的,常见原因包括网络不通、防火墙或安全软件阻拦、SSL 证书异常以及默认仓库不可达。解决该问题的关键在于:确保网络畅通、配置国内稳定镜像源、调整防火墙和安全设置、处理 SSL 证书问题,并保持 Conda 版本更新。通过这些方法,几乎可以彻底消除连接失败问题,保证 Conda 环境的正常使用和包管理的稳定性。

博客 1162

POJ 3352 无向图边双连通分量,缩点,无重边

为什么写这道题还是因为昨天多校的第二题,是道图论,HDU 4612。 当时拿到题目的时候就知道是道模版题,但是苦于图论太弱。模版都太水,居然找不到。 虽然比赛的时候最后水过了,但是那个模版看的还是一知半解,主要还是对于无向图缩点不了解。 所以今天特意找了道求无向图边双连通分量,然后缩点的题学习一下,这道题的缩点和昨天那道差不多,唯一的区别就是这是无重边的,那题是有重边的。 先搞掉这个,下午

just_water 1967

1、世界级模拟电路设计指南

本文详细探讨了模拟电路设计的各个方面,从基础概念到实际应用,涵盖了元件选择、滤波器设计、反馈系统、噪声问题以及SPICE仿真的优缺点。文中还提供了设计实例和无计算机设计方法,旨在帮助工程师提升模拟电路设计的效率与可靠性。

s1t2u3的博客 97

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

【双连通分量】POJ 3352 3177

POJ 3352 跟POJ 3177其实是一样的,只不过3177可能有重边,要特判。 3352问改造后去掉一条边仍然连通,3177问改造后任意两点至少有两条不同的路,其实是一样的,都是先找出桥,把各分量缩成一点变成一棵树,结果就是(子叶数+1)/2 #define N 1005 vector v[N]; int low[N]; bool vis[N]; int du[N]; int cnt

leolin_的专栏 514

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

POJ - 3352 无向图的割和桥以及双连通分量

双连通分量是指图中每两个点都有两条完全不同的路径可到达..也就是去掉这个图的任意一个边一个点...两两之间依然可达..       图论中的桥...在有向图中是两个连通分量之间唯一的边(如果有多条那么都不是桥)...在无向图中是两个双连通分量之间的唯一边...     而割指

zzyzzy12 5640

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

POJ 3352 Road Construction(边双连通分量)

POJ 3352 Road Construction(边双连通分量) http://poj.org/problem?id=3352 题意:         给你一个连通的无向图,现在问你最少在该图中添加几条边,能使得该图变成边双连通图? 分析:         解题思路参考以下博客: http://blog.youkuaiyun.com/lyy289065406/article/details/6...

20164225的博客 214

POJ-3352 Road Construction 双连通分量

  题目链接:http://poj.org/problem?id=3352   本题要求的就是最少添加多少条边可变无桥的连通图,和POJ3177一样,(度为1的边双连通分量的个数+1)/2。 1 //STATUS:C++_AC_16MS_276KB 2 #include <functional> 3 #include <algorithm> 4...

weixin_30919429的博客 130

Tarjan算法求解桥和边双连通分量(附POJ 3352 Road Construction解题报告

Tarjan算法求解桥和边双连通分量(附POJ 3352 Road Construction解题报告) 分类: 算法整理2011-07-21 11:03 1597人阅读 评论(1) 收藏 举报 construction算法        在说Tarjan算法解决桥和边双连通分量问题之前我们先来回顾一下Tarjan算法是如何求解强连通分量的。        Tarjan算

pi9nc的专栏 901

POJ 3177&&3352题解 tarjan算割边 求双连通分量 缩点

首先说一下,身为一个初学者,虽然一遍就AC了,但实际上做这两道模板题花了不少时间,学这个东西还是不能着急,要尽量理解原理才去写代码,不然就算背下来也没什么意思。 POJ题目传送门:http://poj.org/problem?id=3177                              http://poj.org/problem?id=3352 其实这两道题的代

C20161009的博客 854

poj 3177 & 3352 【无向图双连通分量Tarjan】

题目:poj 3177 & 3352 题意:大概意思就是给你一个无向图,让你添加最少的边,让所有点都双连通。 分析:双连通的定义就是任意两个点至少有两条路可达。 其实做法跟添加最少边强连通一样,先对图中已经双连通的缩点,然后重新编号。 这就是著名的Tanjan算法。 通过搜索的思想对所有存在环的边遍相同的号 如果要让所有的点双连通,那么对于缩点后的图中如果度数为 1 的

大神养成中..... 1544

poj 3352 (构造双连通分量)

题目链接:poj 3352 题意描述:给定一个无向连通的公路网,当某些公路路段检修的时候可能会由于该段公路不通,可能会使某些旅游点之间无法通行,求最少需要新建多少条公路,使得任意对一段公路进行检修的时候,所有的旅游景点之间仍然畅通; 分析:此题就是要求构造一个

667

POJ 3177 Redundant Paths && POJ 3352

POJ 3177 Redundant Paths && POJ 3352边-双连通分量,图论 传送门:POJ 3177 传送门:HustOJ 题意这两题差不多,都是给你个联通无向图,问你至少添加多少条边才能让图中任意两点间都有两条路(指边不重复的路)。关于双连通分量,请参考离散数学图论。区别在于,3177,有重边。3352保证输入没有重边。而且3177后台测试数据答案好像认为重边只算一

P.H.S 430

双连通分量 poj3352 poj2186

今天一共a了两个双连通分量的题,但是,真是马虎啊,一个runtime error了好长时间,一个是没有考虑周全然后wa了好长时间,然后看了一下别人的代码就明白了,虽然没有找测试数据,但是真的还是木有成就感啊! poj3352: 大致题意:给出m个n个牛之间的崇拜关系,并且崇拜关系是可以传递的,让求可以受到任何牛都崇拜的牛的个数! 算法框架:对有向图求强连通分量,然后找出所有独立的强连通分量(

生活总是要微笑着面对~ 901
上一篇: hdu 4738 边双连通&桥,有重边情况
下一篇: poj 1422 最小路径覆盖
HuanTongH
博客等级 码龄12年 7粉丝 110原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值