首页 > 其他分享 >无向图的最小环问题

无向图的最小环问题

时间:2023-05-31 19:55:04浏览次数:29  
标签:BFS 短路 最小 问题 枚举 无向 dis

考试时候记错方法,然后还有其他一堆错误然后寄掉了。

你TM学了个JB。

所以写一篇

无向图的最小环问题

解法一,\(floyd\), \(O(n ^ 3)\)

for(int k = 1; k <= n; ++k){
	for(int i = 1; i < k; ++i)if(k != i)
		for(int j = i + 1; j < k; ++j)if(i != j && j != k){
			if(mp[i][k] + mp[k][j] + dis[i][j] < len){
				len = mp[i][k] + mp[k][j] + dis[i][j];
				ans = f[i][j];
			}else if(mp[i][k] + mp[k][j] + dis[i][j] == len){
				ans += f[i][j];
			}
		}
	for(int i = 1; i <= n; ++i)if(k != i)
		for(int j = 1; j <= n; ++j)if(i != j && j != k){
			if(dis[i][j] > dis[i][k] + dis[k][j]){
				dis[i][j] = dis[i][k] + dis[k][j];
				f[i][j] = f[i][k] * f[k][j];
			}else if(dis[i][j] == dis[i][k] + dis[k][j]){
				f[i][j] += f[i][k] * f[k][j];
			}
		}
}

解法二,最短路

枚举一条边,删去它,跑两个点的最短路,更新答案

根据最短路的实现方式有不同的复杂度

一些拓展,(或许某些只适用于边权都为 \(1\) 的情况)

一种做法,枚举一个点,然后 \(BFS\),在访问到之前访问过的点时候进行更新

需要注意的是,严格做法应该为从根出发的不同边对应的子树染上不同的颜色,对于连接两个不同颜色的边进行更新

但是由于找最小环,不染色得到的非法方案一定不是最优解,所以一般不管

比如今天 \(T1\)

这个东西能跑的更快

做法是按照度数从大到小枚举点,从该点出发 \(BFS\), 两个剪枝

  1. 深度大于已经找出的最小环长度的一半(上取整)直接返回

  2. 之前当过根的点删去,不再进行 \(BFS\)

随机数据下接近线性,卡的话目前只有卡到根号的方法,详情咨询 \(Kaguya\)

标签:BFS,短路,最小,问题,枚举,无向,dis
From: https://www.cnblogs.com/Chencgy/p/17447172.html

相关文章

  • 【Azure K8S】演示修复因AKS密钥过期而导致创建服务不成功的问题(The provided client
    问题描述在AzureKubernetes服务中,创建一个InternalLoadBalancer服务,使用以下yaml内容:internallb.yamlapiVersion:v1kind:Servicemetadata:name:ilb-myappannotations:service.beta.kubernetes.io/azure-load-balancer-internal:"true"spec:type:L......
  • 以样本学习方法解决设备故障检测中的标签问题
    文章的主要内容针对这些问题,提出了一种主动领域自适应智能故障检测框架LDE-ADA,该框架利用迁移学习和主动学习相结合的方法来解决标签域扩展问题,从而提高模型的检测性能。同时,提出了一种改进的主动学习查询策略,以准确选择目标域中新增加的健康类别样本来辅助模型训练,解决标签域扩......
  • Java script事件问题
    鼠标事件:/*onclick单击*/  /*ondbclick双击*/  /*onmouseover*/  /* div1.onclick=function(){    console.log('单击')  }  div1.ondbcolick=function(){    console.log('双击')  }*/ 表单事件://onsubmit事件......
  • 邮局--dp经典问题
    题目:http://poj.org/problem?id=1160题意: 一些村庄被建立在一条笔直的高速公路边上,我们用一条坐标轴来描述这条高速公路,每一个村庄的坐标都是整数,没有两个村庄坐标相同。两个村庄间的距离,定义为它们的坐标值差的绝对值。我们需要在一些村庄建立邮局——当然,并不是每一个村庄都......
  • 基于multiprocessing map实现python并行化(全局变量共享 map机制实用向分析 常见问题 p
    转载:(15条消息)基于multiprocessingmap实现python并行化(全局变量共享map机制实用向分析常见问题pandas存储数据)_goto_past的博客-CSDN博客基于multiprocessingmap实现python并行化之前从来没考虑python可以并行化,最近有一个项目需要计算100*100次的遗传算法适应度,每次计算......
  • 01背包问题
    问题描述: 给定n种物品和一背包的容量m,物品i的重量是c[i],其价值是w[i],问如何选择装入背包中的物品总价值最大?每种物品一件,可以选择放或不放。  分析:dp[i][v]表示前i件物品恰放入一个容量为v的背包可以获得的最大价值。则其状态转移方程便是:  这个方程非常重要,基本上所有跟背包......
  • POJ1228(稳定凸包问题)
    题目:Grandpa'sEstate题意:输入一个凸包上的点(没有凸包内部的点,要么是凸包顶点,要么是凸包边上的点),判断这个凸包是否稳定。所谓稳定就是判断能不能在原有凸包上加点,得到一个更大的凸包,并且这个凸包包含原有凸包上的所有点。分析:容易知道,当一个凸包稳定时,凸包的每条边上都要有至少三个......
  • PTA 组最小个数
       importjava.util.ArrayList;importjava.util.Arrays;importjava.util.Scanner;publicclassMain{publicstaticvoidmain(String[]args){ArrayList<Integer>list=newArrayList<>();Scannerinput=newScanner(Syste......
  • 打开扫面共享问题
     症状表现为通过网络共享那些设置完之后,还是无法访问其它电脑共享的文件夹或者打印机,提示无法访问。即使你通过网络也能发现到对方,但就是连不上。解决办法:1、按win+R打开运行,输入“regedit”,打开注册表编辑器。 2、打开计算机\HKEY_LOCAL_MACHINE\SYSTEM\CurrentCont......
  • webpack打包后图片资源无法加载问题
    前言图片在本地开发可以显示,但是打包部署后图片无法加载修改webpack.config.js配置将生成环境的publicPath的路径改为"./"   判断是开发环境还是生成环境在package.json中通过 cross-envNODE_ENV=production设置环境变量 通过 process.env.NODE_ENV访问环境变量......