Redundant Paths(双向图的缩点(边联通分量缩成点))

news2025/1/18 4:43:05

F-Redundant Paths_2022图论班第二章连通性例题与习题 (nowcoder.com)

 

为了从F(1 \leq F \leq 5000)F(1≤F≤5000)一块牧场(编号为1..F)到另一块牧场,贝西和牛群的其他成员不得不穿过烂苹果树附近。奶牛现在厌倦了经常被迫走一条特定的路,想要建造一些新的路,这样它们就总是可以在任何一对田地之间选择至少两条不同的路。他们目前在每个字段对之间至少有一条路由,并且希望至少有两条。当然,当他们从一个领域转移到另一个领域时,他们只能走官方路线。

给定当前连接两个不同字段的R(F -1 \leq R \leq 10,000)R(F -1≤R≤10,000)路径集合的描述,确定必须建立的最小数量的新路径(每条路径正好连接两个字段),以便在任意一对字段之间至少有两条独立的路由。如果路由没有使用相同的路径,那么它们被认为是分离的,即使它们访问了相同的中间字段。

同一个字段对之间可能已经有多条路径了,你也可以构建一条新的路径来连接相同的字段。

输入描述:

第1行:两个用空格分隔的整数:F和R

行2 . .R+1:每一行包含两个空格分隔的整数,它们是某个路径端点的字段。

输出描述:

第1行:一个整数,表示必须构建的新路径的数量。

示例1

输入

复制

7 7

1 2

2 3

3 4

2 5

4 5

5 6

5 7

输出

复制

2

说明

示例说明:

路径的可视化如下:

从1到6和从4到7构建新的路径满足了这些条件。

检查一些路由:

1 - 2: 1 - > 2和1 - > 6 - > 5 - > 2

1 - 4: 1 - > 2 - > 3 - > 4和1 - > 6 - > 5 - > 4

3 - 7: 3 - > 4 - > 7和3 - > 2 - > 5 - > 7

实际上,每一对字段都由两条路由连接。

添加其他路径也可能解决这个问题(比如从6到7添加一条路径)。然而,添加两条路径是最小值。

题解:

一个点到另一个点必须经过一条边,说明存在割边,我们现在要解决,如何加最少的边,使其不存在割边

在一个边联通分量内,是不存在割边的(不需要考虑),所以我们可以把边联通分量缩成点

最后图应该是一棵树,经过观察我们可以发现,只要把数上所有入度为0的点相互连接即可

答案就是(入读为一的点+1)/2

#include<iostream>
#include<algorithm>
#include<string>
#include<queue>
#include<vector>
#include<map>
#include<cstring>
#include<cmath>
#include<stack>
#include<set>
using namespace std;
#define int long long
typedef pair<int,int> PII;
const int N = 200;
vector<int> p[N];
int dfn[N];
int vis[N];
int low[N];
int siz[N];
int color[N];
int idx,cnt;
stack<int> s;
int rd[N];
void tarjin(int u,int fa)
{
	dfn[u] = low[u] = ++idx;
	vis[u] = 1;
	s.push(u);
	for(auto v:p[u])
	{
		if(v == fa)
		continue;
		if(!dfn[v])
		{
			
			tarjin(v,u);
			low[u] = min(low[u],low[v]);
		}
		else if(vis[v])
		{
			low[u] = min(low[u],dfn[v]);
		}
	}
	if(dfn[u] == low[u])
	{
		++cnt;
		while(1)
		{
			int t = s.top();
			s.pop();
			color[t] = cnt;
			siz[cnt]++;
			vis[t] = 0;
			if(t == u)
			break;
		}
	}
}
int a[200050],b[200050];
map<int,int>f[20050];
void solve()
{
	int n,m;
	cin >> n >> m;
	
	for(int i = 1;i <= m;i++)
	{
		int x,y;
		cin >> x >> y;
		a[i] = x;
		b[i] = y;
		p[x].push_back(y);
		p[y].push_back(x);
	}
	for(int i = 1;i <= n;i++)
	{
		if(!dfn[i])
		tarjin(i,0);
	}
	for(int i = 1;i <= m;i++)
	{
		int u = color[a[i]],v = color[b[i]];
		if(u!=v)
		{
			if(f[a[i]][b[i]])
			{
				continue;
			}
			f[a[i]][b[i]] = f[b[i]][a[i]] = 1;
			rd[u]++;
			rd[v]++;
		}
	}
	if(cnt == 1)
	{
		cout<<0;
	}
	else
	{
		int sum = 0;
		for(int i = 1;i <= cnt;i++)
		{
			sum += (rd[i] == 1);
		}
		cout << (sum + 1)/2;
	}
}
//1 -7 1 -7
signed main(){
//	ios::sync_with_stdio(false);
//	cin.tie(0);
//	cout.tie(0);
	int t = 1;
//	cin >> t;
    while(t--)
	{

		solve();
	} 
}
//3 3 2 2 1 0
//1 2 1 1 1 0

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/142350.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

YOLO-V5 系列算法和代码解析(六)—— 分布式训练

文章目录预备知识DPDDPDP和DDP对比YOLO-V5 实际使用参考链接预备知识 为了更好的理解分布式相关的内容&#xff0c;需要提前熟悉一些基本概念和特定的名称。分布式训练涉及到设备端&#xff08;CPU&#xff0c;GPU&#xff09;&#xff0c;算法端&#xff08;梯度更新&#xff…

项目团队承诺管理的3个重要因素

每一个项目都需要一个强有力的领导者&#xff0c;以获得适当的成功机会。与一个优柔寡断、缺乏经验的项目领导者相比&#xff0c;一个有组织的领导者在管理一个精心策划的项目时&#xff0c;更有可能取得项目的成功和客户的满意。再加上一个非常投入和负责任的项目团队&#xf…

[ docker相关知识 ] 删除 docker 拉取的镜像 -- 释放内存

&#x1f36c; 博主介绍 &#x1f468;‍&#x1f393; 博主介绍&#xff1a;大家好&#xff0c;我是 _PowerShell &#xff0c;很高兴认识大家~ ✨主攻领域&#xff1a;【渗透领域】【数据通信】 【通讯安全】 【web安全】【面试分析】 &#x1f389;点赞➕评论➕收藏 养成习…

Speckle 3d数据引擎Python开发实战

在这个教程中&#xff0c;我们将使用 Speckle 数据并使用它来创建一个超级简单的仪表板。 我们将从Speckle流中接收几何图形&#xff0c;更新数据&#xff0c;并使用它来使用 Plotly 和 Dash 进行一些计算和简单绘图。 我们假设你具有 Python 和 Speckle 的一般知识。 如果有任…

信号处理——MATLAB音频信号加噪、滤波

音频信号叠加噪声及滤波一、前言二、信号分析及加噪三、滤波去噪四、总结很抱歉大家&#xff0c;最近经常有朋友私信问我关于这篇信号处理的一些问题&#xff0c;因为最近比较忙所以没能一一回复&#xff0c;给大家说句抱歉&#xff0c;希望那些给我私信的人可以看到。大家问的…

golang 垃圾回收-三色标记法(白话版)

对于golang 垃圾回收的了解&#xff0c;我理解更多的就是了解&#xff0c;实际做项目能用到垃圾回收的知识点不多&#xff0c;但有些晦涩难懂的语言&#xff0c;是我们的绊脚石&#xff0c;对于技术怎么能理解就怎么记忆。 1. golang垃圾回收的基础&#xff1a;标记&#xff08…

ESNI 和ECH的前世今生

这边文章中提到过虽然 TLS 能够加密整个通信过程&#xff0c;但是在协商的过程中依旧有很多隐私敏感的参数不得不以明文方式传输&#xff0c;其中最为重要且棘手的就是将要访问的域名&#xff0c;即 SNI&#xff08;Server Name Indication&#xff09;。同时还有用于告知客户端…

javaEE高阶---MyBatis

一 : 什么是MyBatis MyBatis是更简单完成程序和数据库交互的工具,也就是更简单的操作和读取数据库的工具.MyBatis 是一款优秀的持久层框架&#xff0c;它支持自定义 SQL、存储过程以及高级映射。MyBatis 去除了几乎所有的 JDBC 代码以及设置参数和获取结果集的动作 . MyBatis …

[oeasy]python0037_终端_terminal_电传打字机_tty_shell_控制台_console_发展历史

换行回车 回忆上次内容 换行 和 回车 是两回事 换行 对应字节0x0ALine-Feed 水平 不动垂直 向上喂纸 所以是 feed 回车 对应字节0x0DCarriage-Return 垂直 不动水平 回到纸张左侧 可移动的打印头 运输字符 的 装置 (Carriage)回到 行首 所以是 Return tty、terminal、shell、…

【视觉SLAM】DM-VIO: Delayed Marginalization Visual-Inertial Odometry

L. v. Stumberg and D. Cremers, “DM-VIO: Delayed Marginalization Visual-Inertial Odometry,” in IEEE Robotics and Automation Letters, vol. 7, no. 2, pp. 1408-1415, April 2022, doi: 10.1109/LRA.2021.3140129. 论文阅读方法&#xff1a;Title&#xff0c;Abstract…

百趣代谢组学文献分享:学科交叉研究,微生物回收重金属机制研究

发表期刊&#xff1a;Environment International 影响因子&#xff1a;7.297 发表时间&#xff1a;2019年 合作单位&#xff1a;福建农林大学 百趣代谢组学文献分享&#xff0c;该文章是BIOTREE协助客户2019年发表在Environment International上的关于微生物回收重金属机制研…

Tomcat的Connector启动过程分析

一. 前言 前面分析了tomcat的整体架构和tomcat的启动过程&#xff0c;在分析启动过程的时候只讲了整体的启动过程&#xff0c;本篇来重点分析一下tomcat的Connector(连接器)组件的启动过程。 二.从Connector的构造开始 那么org.apache.catalina.connector.Connector是在什么…

文献学习06_利用句法指示符和句子上下文加强关系抽取

论文信息 Subjects: Computation and Language (cs.CL) &#xff08;1&#xff09;题目&#xff1a;Enhancing Relation Extraction Using Syntactic Indicators and Sentential Contexts &#xff08;利用句法指示符和句子上下文加强关系抽取&#xff09; &#xff08;2&…

论文精读:RPM-Net: Robust Point Matching using Learned Features

论文地址:https://arxiv.org/pdf/2003.13479.pdf 点云配准任务 点云配准可以当做一个基础的上游任务,根据从不同视角下获取的点云数据配准为完整的点云数据,下游任务众多 基本任务:求一个变换矩阵,使得两个具有未知点的点云数据重合。 刚性与非刚性: 刚性配准:旋转和平…

Leetcode 121买卖股票的最佳时机

题目描述&#xff1a; 给定一个数组 prices &#xff0c;它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价格。 你只能选择 某一天 买入这只股票&#xff0c;并选择在 未来的某一个不同的日子 卖出该股票。设计一个算法来计算你所能获取的最大利润。 返回你可以从这笔…

solr集群配置(使用solr自带的Jetty实现集群配置)

看了很多的资料发现基本集群搭建都是通过tomcat的方式实现的&#xff0c;但是在高版本的solr中&#xff0c;可以通过solr自带的jetty实现集群的搭建 准备 1.虚拟机安装linux 2.安装jdk 3.下载solr并解压 步骤 1.进入到解压后solr的bin目录下&#xff0c;并执行 ./solr -e clo…

赛狐ERP | 如何高效管理亚马逊广告!用这款亚马逊ERP就够了!

亚马逊的广告管理是是每一位亚马逊运营的必修课&#xff0c;除自然流量外&#xff0c;广告来带的流量与转化占比都极高&#xff0c;广告做活了&#xff0c;就是打虎上山&#xff1b;广告搞砸了&#xff0c;就是骑虎难下&#xff1a;不开广告吧没有流量卖不动、开了广告吧财务账…

#B. 部落联盟

一,题目Description在草原上有N个部落&#xff0c;每个部落都有其坐标(xi,yi)每个部落都有个武力值&#xff0c;可正可负由于部落间只能通过马匹来传递信息于是只有当两个部落间的距离为1的时候&#xff0c;两个部落才有可能进行联系&#xff0c;距离计算公式为abs(xi-xj)abs(y…

人生的喜悦、不快与成长,都在那一篇篇的文字中得到记录 | 2022 年终总结

又是一年的总结&#xff0c;不知道自己今年又该写点什么。但提笔总是好的&#xff0c;也算对今年的一个交代和对未来的一份期许。窗外的阳光正好&#xff0c;对面楼的敲打声叮叮咚咚&#xff0c;窗台上的两只猫睡得依旧奔放和舒适。这样一个看似美好的下午&#xff0c;一个平凡…

Internet Download Manager2023最好用的HTTP下载神器

Internet Download Manager 介绍2023最佳下载利器。Internet Download Manager (简称IDM) 是一款Windows 平台功能强大的多线程下载工具&#xff0c;国外非常受欢迎。支持断点续传&#xff0c;支持嗅探视频音频&#xff0c;接管所有浏览器&#xff0c;具有站点抓取、批量下载队…